C 标准库

来源:互联网 发布:网络摄像机安防方案 编辑:程序博客网 时间:2024/06/02 05:13

简介

locale.h 头文件定义了特定地域的设置,比如日期格式和货币符号。接下来我们将介绍一些宏,以及一个重要的结构 struct lconv 和两个重要的函数。

库宏

下面列出了头文件 locale.h 中定义的宏,这些宏将在下列的两个函数中使用:

序号 宏 & 描述 1 LC_ALL
设置下面的所有选项。 2 LC_COLLATE
影响 strcoll 和 strxfrm 函数。 3 LC_CTYPE
影响所有字符函数。 4 LC_MONETARY
影响 localeconv 函数提供的货币信息。 5 LC_NUMERIC
影响 localeconv 函数提供的小数点格式化和信息。 6 LC_TIME
影响 strftime 函数。

库函数

下面列出了头文件 locale.h 中定义的函数:

序号 函数 & 描述 1 char *setlocale(int category, const char *locale)
设置或读取地域化信息。 2 struct lconv *localeconv(void)
设置或读取地域化信息。

库结构

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_posnn_sign_posn:

值 描述 0 封装值和 currency_symbol 的括号。 1 放置在值和 currency_symbol 之前的符号。 2 放置在值和 currency_symbol 之后的符号。 3 紧挨着放置在值和 currency_symbol 之前的符号。 4 紧挨着放置在值和 currency_symbol 之后的符号。

C 库函数 - setlocale()

描述

C 库函数 char *setlocale(int category, const char *locale) 设置或读取地域化信息。

声明

下面是 setlocale() 函数的声明。

char *setlocale(int category, const char *locale)

参数

  • category – 这是一个已命名的常量,指定了受区域设置影响的函数类别。
    • LC_ALL 包括下面的所有选项。
    • LC_COLLATE 字符串比较。参见 strcoll()。
    • LC_CTYPE 字符分类和转换。例如 strtoupper()。
    • LC_MONETARY 货币格式,针对 localeconv()。
    • LC_NUMERIC 小数点分隔符,针对 localeconv()。
    • LC_TIME 日期和时间格式,针对 strftime()。
    • LC_MESSAGES 系统响应。
  • locale – 如果 locale 是 NULL 或空字符串 “”,则区域名称将根据环境变量值来设置,其名称与上述的类别名称相同。

返回值

如果成功调用 setlocale(),则返回一个对应于区域设置的不透明的字符串。如果请求无效,则返回值是 NULL。

实例

下面的实例演示了 setlocale() 函数的用法。

#include <locale.h>#include <stdio.h>#include <time.h>int main (){   time_t currtime;   struct tm *timer;   char buffer[80];   time( &currtime );   timer = localtime( &currtime );   printf("Locale is: %s\n", setlocale(LC_ALL, "en_GB"));   strftime(buffer,80,"%c", timer );   printf("Date is: %s\n", buffer);   printf("Locale is: %s\n", setlocale(LC_ALL, "de_DE"));   strftime(buffer,80,"%c", timer );   printf("Date is: %s\n", buffer);   return(0);}

让我们编译并运行上面的程序,这将产生以下结果:

Locale is: en_GBDate is: Thu 23 Aug 2012 06:39:32 MSTLocale is: de_DEDate is: Do 23 Aug 2012 06:39:32 MST

C 库函数 - localeconv()

描述

C 库函数 struct lconv *localeconv(void) 设置或读取地域化信息。它会返回一个 lconv 结构类型的对象。

声明

下面是 localeconv() 函数的声明。

struct lconv *localeconv(void)

参数

  • NA

返回值

该函数返回一个指向当前区域 struct lconv 的指针,它的结构如下:

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

实例

下面的实例演示了 localeconv() 函数的用法。

#include <locale.h>#include <stdio.h>int main (){   struct lconv * lc;   setlocale(LC_MONETARY, "it_IT");   lc = localeconv();   printf("Local Currency Symbol: %s\n",lc->currency_symbol);   printf("International Currency Symbol: %s\n",lc->int_curr_symbol);   setlocale(LC_MONETARY, "en_US");   lc = localeconv();   printf("Local Currency Symbol: %s\n",lc->currency_symbol);   printf("International Currency Symbol: %s\n",lc->int_curr_symbol);   setlocale(LC_MONETARY, "en_GB");   lc = localeconv();   printf ("Local Currency Symbol: %s\n",lc->currency_symbol);   printf ("International Currency Symbol: %s\n",lc->int_curr_symbol);   printf("Decimal Point = %s\n", lc->decimal_point);   return 0;}

让我们编译并运行上面的程序,这将产生以下结果:

Local Currency Symbol: EURInternational Currency Symbol: EURLocal Currency Symbol: $International Currency Symbol: USDLocal Currency Symbol: £International Currency Symbol: GBPDecimal Point = .
原创粉丝点击