setlocale
定義於標頭檔案 <locale.h> |
||
char* setlocale( int category, const char* locale ); |
||
setlocale
函式將指定的系統區域設定或其一部分安裝為新的 C 區域設定。修改會一直生效,並影響所有區域設定敏感的 C 庫函式的執行,直到下一次呼叫 setlocale
。如果 locale
是一個空指標,setlocale
查詢當前的 C 區域設定而不修改它。
目錄 |
[編輯] 引數
category | - | 區域設定類別識別符號,是 LC_xxx 宏之一。可以為空。 |
locale | - | 系統特定的區域設定識別符號。對於使用者首選的區域設定可以是 "",對於最小區域設定可以是 "C" |
[編輯] 返回值
指向窄的以 null 結尾的字串的指標,該字串標識應用更改後的 C 區域設定(如果有),失敗時為 null 指標。
返回字串的副本以及此 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) { // 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.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 函式 (p: 163-164)
- C11 標準 (ISO/IEC 9899:2011)
- 7.11.1.1 setlocale 函式 (p: 224-225)
- C99 標準 (ISO/IEC 9899:1999)
- 7.11.1.1 setlocale 函式 (p: 205-206)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.4.1.1 setlocale 函式
[編輯] 另請參閱
setlocale 的區域設定類別 (宏常量) | |
C++ 文件 關於 setlocale
|
[編輯] 外部連結
1. | Windows 區域設定名稱列表. |
2. | Linux 區域設定名稱列表. |