C 编程/locale.h
在计算机领域,locale.h 是 C 编程语言的一个头文件,用于本地化目的。该头文件提供两个关键函数:localeconv
和 setlocale
。前者提供对当前区域设置的访问,而后者允许设置当前区域设置。该头文件还定义了 lconv
结构体,该结构体存储有关给定区域设置的信息,包括数字和货币显示的本地首选项。
#include <locale.h>
char *setlocale(int category, const char *locale);
struct lconv *localeconv(void);
setlocale()
函数用于设置或查询程序的当前区域设置。
如果 locale
不是 NULL
,则程序的当前区域设置将根据参数进行修改。参数 category
决定程序当前区域设置的哪些部分应该被修改。
如果 locale
是 NULL
,则只查询当前区域设置,而不进行修改。
localeconv()
函数返回一个指向当前区域设置的 struct lconv
的指针。此结构体将在下面一节中显示,它包含与区域设置类别 LC_NUMERIC 和 LC_MONETARY 相关的所有值。程序还可以使用 printf()
和 strfmon()
函数,它们的行为将根据实际使用的区域设置而有所不同。
struct lconv
包含以下字段
char *decimal_point;
基数字符。
char *thousands_sep;
基数字符左侧数字分组的间隔符。
char *grouping;
每个元素代表一组中的数字个数;索引越高的元素越靠左。值为 CHAR_MAX
的元素表示不再进行进一步分组。值为 0
的元素表示使用前面元素作为所有更靠左的分组。
char *int_curr_symbol;
前三个字符来自 ISO 4217 的货币符号。第四个字符是间隔符。第五个字符是 '\0'
。
char *currency_symbol;
本地货币符号。
char *mon_decimal_point;
与上面的 decimal_point
相同。
char *mon_thousands_sep;
与上面的 thousands_sep
相同。
char *mon_grouping;
与上面的 grouping
相同。
char *positive_sign;
正值的符号。
char *negative_sign;
负值的符号。
char int_frac_digits;
国际小数位数。
char frac_digits;
本地小数位数。
char p_cs_precedes;
如果 currency_symbol
位于正值前面,则为 1
,如果位于后面,则为 0
。
char p_sep_by_space;
如果空格将 currency_symbol
与正值隔开,则为 1
。
char n_cs_precedes;
如果 currency_symbol
位于负值前面,则为 1
,如果位于后面,则为 0
。
char n_sep_by_space;
如果空格将 currency_symbol
与负值隔开,则为 1
。
char p_sign_posn;
char n_sign_posn;
正负号的位置
0
:括号包围数量和currency_symbol
。1
:符号字符串位于数量和currency_symbol
之前。2
:符号字符串位于数量和currency_symbol
之后。3
:符号字符串紧挨着currency_symbol
之前。4
:符号字符串紧挨着currency_symbol
之后。
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main(void)
{
/* Locale is set to "C" before this. This call sets it
to the "current locale" by reading environment variables: */
setlocale(LC_ALL, "");
const struct lconv * const currentlocale = localeconv();
printf("In the current locale, the default currency symbol is: %s\n",
currentlocale->currency_symbol);
return EXIT_SUCCESS;
}
- locale.h by OpenGroup
- localeconv by OpenGroup
- setlocale by OpenGroup