setlocale
|
定义于头文件
<locale.h>
|
||
|
char
*
setlocale
(
int
category,
const
char
*
locale
)
;
|
||
setlocale
函数将指定的系统区域设置或其部分安装为新的 C 区域设置。此修改会持续生效,并影响所有区域设置敏感的 C 库函数的执行,直至下一次调用
setlocale
。若
locale
为空指针,
setlocale
会查询当前 C 区域设置而不进行修改。
目录 |
参数
| category | - |
区域设置类别标识符,为
LC_xxx
宏之一。可为空值。
|
| locale | - | 系统特定的区域设置标识符。可为 "" (用户首选区域设置)或 "C" (最小区域设置) |
返回值
指向标识应用更改后(若有)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 <locale.h> #include <stdio.h> #include <time.h> #include <wchar.h> int main(void) { // C 区域设置将启用 UTF-8 英文; // 小数点将使用德语格式 // 日期和时间格式将使用日语格式 setlocale(LC_ALL, "en_US.UTF-8"); setlocale(LC_NUMERIC, "de_DE.utf8"); setlocale(LC_TIME, "ja_JP.utf8"); 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: 月曜日 2017年09月25日 13時00分15秒
参考文献
- C23 标准 (ISO/IEC 9899:2024):
-
- 7.11.1.1 setlocale 函数 (p: TBD)
- C17 标准 (ISO/IEC 9899:2018):
-
- 7.11.1.1 setlocale 函数 (页码: 163-164)
- C11 标准 (ISO/IEC 9899:2011):
-
- 7.11.1.1 setlocale 函数 (页: 224-225)
- C99标准(ISO/IEC 9899:1999):
-
- 7.11.1.1 setlocale函数(页码:205-206)
- C89/C90 标准 (ISO/IEC 9899:1990):
-
- 4.4.1.1 setlocale 函数
参见
|
setlocale
的区域设置类别
(宏常量) |
|
|
C++ 文档
关于
setlocale
|
|
外部链接
| 1. | Windows 区域设置名称列表 。 |
| 2. | Linux 区域设置名称列表 。 |