setlocale
函数 <clocale>
char* setlocale (int category, const char* locale);
设置或检索区域设置
设置当前程序要使用的区域设置信息,更改整个区域设置或部分区域设置。
该函数还可以通过将
NULL作为参数locale的值来检索当前区域的名称。
区域设置包含关于如何解释和执行特定的输入/输出和转换操作的信息,
这些信息要考虑到特定的位置和语言设置。
大多数运行环境都根据用户首选项或本地化设置特定的语言环境信息。
但是,独立于这个系统区域设置,在启动时,所有C程序都有“C”区域设置,
这是一个相当中立的区域设置,具有最小的区域设置信息,允许程序的结果是可预测的。
为了在环境中使用默认的区域设置,这个函数可以用""作为参数locale来调用。
在程序启动时,选择的语言环境是“C”语言环境,这与通过调用
setlocale(LC_ALL,“C”)
设置的语言环境相同。
环境中选择的区域设置可以通过调用
setlocale(LC_ALL,"")来选择。
当前区域设置中受此函数调用影响的部分由参数category指定。
☲ 参数
category
区域设置的一部分受到影响。它是<
clocale>中定义为宏的常量值之一:
locale
区域 |
说明 |
"C" |
最小的“C”语言环境 |
"" |
环境的默认语言 |
如果该参数的值为NULL,则函数不会对当前区域进行任何更改,但仍然返回当前区域的名称。
☉ 返回值
成功时,返回一个指向标识类别当前设置的区域设置的C字符串的指针。
如果category是LC_ALL并且地区的不同部分被设置为不同的值,
则返回的字符串以不同库实现的格式提供该信息。
如果函数未能设置新的区域设置,则不会修改该区域设置,并返回一个空指针
☣ 示例
/* setlocale example */
#include <stdio.h> /* printf */
#include <time.h> /* time_t, struct tm, time, localtime, strftime */
#include <locale.h> /* struct lconv, setlocale, localeconv */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
struct lconv * lc;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
int twice=0;
do {
printf ("Locale is: %s\n", setlocale(LC_ALL,NULL) );
strftime (buffer,80,"%c",timeinfo);
printf ("Date is: %s\n",buffer);
lc = localeconv ();
printf ("Currency symbol is: %s\n-\n",lc->currency_symbol);
setlocale (LC_ALL,"");
} while (!twice++);
return 0;
}
|
可能输出:
Locale is: C
Date is: 01/15/07 13:33:47
Currency symbol is:
-
Locale is: English_United States.1252
Date is: 1/15/07 1:33:47 PM
Currency symbol is: $
-
↭ 数据竞争
改变区域设置可能会在并发调用同一函数或受区域设置影响的c库函数时引入数据竞争。
➤ 异常(C++11)
无抛出保证:此函数不会抛出异常。
🍄 另请参阅