目录
简介
库宏
实例
简介
库宏
库函数
库结构
实例
C 标准库中的
下面的值是特定实现的,且是通过 #define 指令来定义的,这些值都不得低于下边所给出的值。
需要注意的是,这些宏常量的值都是给出了最小的限制,具体实现中可能会有更高的限制。
#include
#include
int main() {
printf("CHAR_BIT = %d\n", CHAR_BIT);
printf("SCHAR_MIN = %d\n", SCHAR_MIN);
printf("SCHAR_MAX = %d\n", SCHAR_MAX);
printf("UCHAR_MAX = %u\n", UCHAR_MAX);
printf("CHAR_MIN = %d\n", CHAR_MIN);
printf("CHAR_MAX = %d\n", CHAR_MAX);
printf("MB_LEN_MAX = %d\n", MB_LEN_MAX);
printf("SHRT_MIN = %d\n", SHRT_MIN);
printf("SHRT_MAX = %d\n", SHRT_MAX);
printf("USHRT_MAX = %u\n", USHRT_MAX);
printf("INT_MIN = %d\n", INT_MIN);
printf("INT_MAX = %d\n", INT_MAX);
printf("UINT_MAX = %u\n", UINT_MAX);
printf("LONG_MIN = %ld\n", LONG_MIN);
printf("LONG_MAX = %ld\n", LONG_MAX);
printf("ULONG_MAX = %lu\n", ULONG_MAX);
return 0;
}
让我们编译和运行上面的程序,这将产生下列结果:
CHAR_BIT = 8
SCHAR_MIN = -128
SCHAR_MAX = 127
UCHAR_MAX = 255
CHAR_MIN = -128
CHAR_MAX = 127
MB_LEN_MAX = 5
SHRT_MIN = -32768
SHRT_MAX = 32767
USHRT_MAX = 65535
INT_MIN = -2147483648
INT_MAX = 2147483647
UINT_MAX = 4294967295
LONG_MIN = -2147483648
LONG_MAX = 2147483647
ULONG_MAX = 4294967295
本地化是指针对不同的语言、文化和地区,为程序提供相应的显示格式和文化习惯支持。在需要编写多语言、多地区的程序时,
下面列出了头文件 locale.h 中定义的宏,这些宏将在下列的两个函数中使用:
下面列出了头文件 locale.h 中定义的函数:
这两个函数在进行国际化开发时非常有用,能够帮助程序根据不同的地域化环境提供相应的显示格式和文化习惯支持。
typedef struct {
char *decimal_point;
char *thousands_sep;
char *grouping;
char *int_curr_symbol;
char *currency_symbol;
char *mon_decimal_point;
char *mon_thousands_sep;
char *mon_grouping;
char *positive_sign;
char *negative_sign;
char int_frac_digits;
char frac_digits;
char p_cs_precedes;
char p_sep_by_space;
char n_cs_precedes;
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
} lconv
以下是各字段的描述:
序号 | 字段 & 描述 |
---|---|
1 | decimal_point 用于非货币值的小数点字符。 |
2 | thousands_sep 用于非货币值的千位分隔符。 |
3 | grouping 一个表示非货币量中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组。 |
4 | int_curr_symbol 国际货币符号使用的字符串。前三个字符是由 ISO 4217:1987 指定的,第四个字符用于分隔货币符号和货币量。 |
5 | currency_symbol 用于货币的本地符号。 |
6 | mon_decimal_point 用于货币值的小数点字符。 |
7 | mon_thousands_sep 用于货币值的千位分隔符。 |
8 | mon_grouping 一个表示货币值中每组数字大小的字符串。每个字符代表一个整数值,每个整数指定当前组的位数。值为 0 意味着前一个值将应用于剩余的分组。 |
9 | positive_sign 用于正货币值的字符。 |
10 | negative_sign 用于负货币值的字符。 |
11 | int_frac_digits 国际货币值中小数点后要显示的位数。 |
12 | frac_digits 货币值中小数点后要显示的位数。 |
13 | p_cs_precedes 如果等于 1,则 currency_symbol 出现在正货币值之前。如果等于 0,则 currency_symbol 出现在正货币值之后。 |
14 | p_sep_by_space 如果等于 1,则 currency_symbol 和正货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和正货币值之间不使用空格分隔。 |
15 | n_cs_precedes 如果等于 1,则 currency_symbol 出现在负货币值之前。如果等于 0,则 currency_symbol 出现在负货币值之后。 |
16 | n_sep_by_space 如果等于 1,则 currency_symbol 和负货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和负货币值之间不使用空格分隔。 |
17 | p_sign_posn 表示正货币值中正号的位置。 |
18 | n_sign_posn 表示负货币值中负号的位置。 |
下面的值用于 p_sign_posn 和 n_sign_posn:
值 | 描述 |
---|---|
0 | 封装值和 currency_symbol 的括号。 |
1 | 放置在值和 currency_symbol 之前的符号。 |
2 | 放置在值和 currency_symbol 之后的符号。 |
3 | 紧挨着放置在值和 currency_symbol 之前的符号。 |
4 | 紧挨着放置在值和 currency_symbol 之后的符号。 |
#include
#include
#include
int main() {
setlocale(LC_ALL, "zh_CN.UTF-8"); // 设置本地化环境为中文UTF-8编码
// 获取当前本地化环境的时间格式信息
struct tm *tm_now;
time_t time_now = time(NULL);
tm_now = localtime(&time_now);
char time_str[128];
strftime(time_str, sizeof(time_str), "%x %X", tm_now);
printf("当前时间: %s\n", time_str); // 输出本地化时间信息
// 获取当前本地化环境的货币格式信息
struct lconv *lc = localeconv();
printf("货币符号: %s\n", lc->currency_symbol); // 输出货币符号
printf("千位分隔符: %s\n", lc->thousands_sep); // 输出千位分隔符
// 格式化输出数字
double number = 1234567.89;
printf("格式化后的数字: %'.2f\n", number); // 使用千位分隔符和小数点进行格式化输出
// 格式化输出货币值
double price = 1234.56;
printf("格式化后的货币值: %s%.2f\n", lc->currency_symbol, price); // 使用本地化货币符号和小数点格式进行格式化输出
return 0;
}