setlocale
setlocale
在头文件 | | |
---|---|---|
char * setlocale(int category,const char * locale); | | |
setlocale
函数将指定的系统语言环境或其部分作为新的C语言环境安装。这些修改仍然有效,并会影响到所有区域设置敏感的C库函数的执行,直到下一次调用setlocale
。如果locale
是空指针,则setlocale
查询当前的C语言环境而不修改它。
参数
category | - | 区域设置类别标识符,其中一个LC_xxx宏。可能为null。 |
---|---|---|
locale | - | 系统特定的区域设置标识符。对于用户首选语言环境可以是“”,对于最小语言环境可以是“C” |
返回值
指向一个以null结尾的空字符串的指针,该字符串在应用更改后标识C语言环境(如果有)或空指针失败。
返回的字符串以及此次调用中使用的类别的副本setlocale
可能会稍后在程序中用于将语言环境恢复到此调用结束时的状态。
注意
在程序启动期间,等同于setlocale(LC_ALL, "C"在任
何用户代码运行之前执行。
虽然返回类型是char*
,但修改指向的字符是未定义的行为。
由于setlocale
修改影响的区域设置相关的函数执行的全局状态,它是不确定的行为,从一个线程调用它,而另一个线程正在执行任意的功能如下:fprintf
,isprint
,iswdigit
,localeconv
,tolower
,fscanf
,ispunct
,iswgraph
,mblen
,toupper
,isalnum
,isspace
,iswlower
,mbstowcs
,towlower
,isalpha
,isupper
,iswprint
,mbtowc
,towupper
,isblank
,iswalnum
,iswpunct
,setlocale
,wcscoll
,iscntrl
,iswalpha
,iswspace
,strcoll
,wcstod
,isdigit
,iswblank
,iswupper
,strerror
,wcstombs
,isgraph
,iswcntrl
,iswxdigit
,strtod
,wcsxfrm
,islower
,iswctype
, isxdigit
.
POSIX还定义了一个名为“POSIX”的语言环境,该语言环境始终可以访问,并且完全等同于默认的最小“C”语言环境。
POSIX还指定返回的指针,不仅仅是指向字符串的内容,可能会通过后续对setlocale的调用而失效。
例
#include <stdio.h>
#include <locale.h>
#include <time.h>
#include <wchar.h>
int main(void)
{
// the C locale will be UTF-8 enabled English;
// decimal dot will be German
// date and time formatting will be Japanese
setlocale(LC_ALL, "en_US.UTF-8"
setlocale(LC_NUMERIC, "de_DE"
setlocale(LC_TIME, "ja_JP"
wchar_t str[100];
time_t t = time(NULL
wcsftime(str, 100, L"%A %c", localtime(&t)
wprintf(L"Number: %.2f\nDate: %Ls\n", 3.14, str
}
可能的输出:
Number: 3,14
Date: 木曜日 2014年11月06日 09時58分56秒
参考
- C11标准(ISO/IEC 9899:2011):
另请参阅
LC_ALLLC_COLLATELC_CTYPELC_MONETARYLC_NUMERICLC_TIME | locale categories for setlocale (macro constant) |
---|
| C ++文档的setlocale |