头文件<locale.h>定义了特定地域的设置,如日期格式和货币符号。
<locale.h>中声明了两个函数和一个类型,并且定义了一些宏。
1、宏:
LC_ALL 设置下面的所有选项。
LC_COLLATE 影响 strcoll 和 strxfrm 函数。
LC_CTYPE 影响所有字符函数
LC_MONETARY 影响 localeconv 函数提供的货币信息。
LC_NUMERIC 影响 localeconv 函数提供的小数点格式化和信息。
LC_TIME 影响 strftime 函数。
2、结构:
struct lconv {
char *decimal_point; //用于非货币值的小数点字符。
char *thousands_sep; //用于非货币值的千位分隔符。
char *grouping; //表示非货币量中每组数字大小的字符串。值为 0 意味着前一个值将应用于剩余的分组。
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; //如果等于 1,则 currency_symbol 出现在正货币值之前。如果等于 0,则 currency_symbol 出现在正货币值之后。
char p_sep_by_space; //如果等于 1,则 currency_symbol 和正货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和正货币值之间不使用空格分隔。
char n_cs_precedes; //如果等于 1,则 currency_symbol 出现在负货币值之前。如果等于 0,则 currency_symbol 出现在负货币值之后。
char n_sep_by_space; //如果等于 1,则 currency_symbol 和负货币值之间使用空格分隔。如果等于 0,则 currency_symbol 和负货币值之间不使用空格分隔。
char p_sign_posn; //表示正货币值中正号的位置。
char n_sign_posn; //表示负货币值中负号的位置。
} ;
3、函数:
3.1函数setlocale被用来修改或查询程序当前的整个区域设置或者其中的一部分
char * setlocale(int category,const char *locale);
参数:category为LC_ALL,LC_COLLATE等。locale若是空字符串 "",则会使用系统环境变量的 locale 。若 locale 为零(NULL),则不会改变地域化配置,返回当前的地域值,若系统尚未实作则返回 false。
返回值:成功,返回相应设置的地域化信息。字符串可能分配在静态存储区。失败,返回NULL
3.2函数localeconv获得包含本地数字及货币信息格式的数组
struct lconv *localeconv(void);
功能:返回当前地域设置的信息
返回值:返回一个指向struct lconv 类型结构体的指针。
例:
#include <stdio.h>
#include <locale.h>
void main()
{
struct lconv *lv;
setlocale(LC_MONETARY,"en_GB");
lv=localeconv();
printf("Int_Curr_Symbol:%s
",lv->int_curr_symbol);
printf("Currency_Symbol:%s
",lv->currency_symbol);
printf("Point:%s
",lv->decimal_point);
}
结果:
Int_Curr_Symbol:GBP
Currency_Symbol:▒
Point:.