C++官网参考链接:https://cplusplus.com/reference/clocale/setlocale/
函数
<clocale>
setlocale
char* setlocale (int category, const char* locale);
设置或获取语言环境
设置当前程序要使用的语言环境信息,更改整个语言环境或部分语言环境。该函数还可以通过传递NULL作为实参locale的值来获取当前语言环境的名称。
语言环境包含有关如何解释和执行某些输入/输出和转换操作的信息,同时考虑到位置和语言特定设置。
大多数运行环境都根据用户首选项或本地化设置了特定的语言环境信息。但是,独立于这个系统语言环境,在启动时,所有C程序都有“C”语言环境,这是一个相当中立的语言环境,具有最小的语言环境信息,允许程序的结果是可预测的。
为了使用环境中设置的默认语言环境,可以使用""作为locale的实参来调用此函数。
在程序启动时,所选择的区域设置是“C”语言环境,这与调用setlocale(LC_ALL, "C")所设置的语言环境相同。
可以通过调用setlocale(LC_ALL, "")来选择环境中选择的语言环境。
当前语言环境中受此函数调用影响的部分由实参category指定。
形参
category
受影响的部分语言环境。它是以下常量值之一,定义为 <clocale>中的宏:
value | Portion of the locale affected(受影响的部分语言环境) |
---|---|
LC_ALL | The entire locale.(整个语言环境) |
LC_COLLATE | Affects the behavior of strcoll and strxfrm. |
LC_CTYPE | Affects character handling functions (all functions of <cctype>, except isdigit and isxdigit), and the multibyte and wide character functions. |
LC_MONETARY | Affects monetary formatting information returned by localeconv. (影响localeconv返回的货币格式信息。) |
LC_NUMERIC | Affects the decimal-point character in formatted input/output operations and string formatting functions, as well as non-monetary information returned by localeconv. (影响格式化输入/输出操作和字符串格式化函数中的小数点字符,以及localeconv返回的非货币信息。) |
LC_TIME | Affects the behavior of strftime. |
locale
包含C语言环境名称的C字符串。这些是特定于系统的,但至少必须存在以下两个语言环境:
locale name | description |
---|---|
"C" | Minimal "C" locale |
"" | Environment's default locale |
如果此形参的值为NULL,则该函数不会对当前语言环境做任何更改,但该函数仍然会返回当前语言环境的名称。
返回值
成功时,指向标识当前为category设置的语言环境的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;
}
当前面的代码运行时,可能的输出之一是:
数据竞争
更改语言环境可能会导致对同一函数或受语言环境影响的任何C库函数的同时调用导致数据竞争。
异常(C++)
无抛出保证:此函数从不抛出异常。