名稱空間
變體
操作

setlocale

來自 cppreference.com
< c‎ | locale
定義於標頭檔案 <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 修改了影響區域設定相關函式執行的全域性狀態,所以在一個執行緒中呼叫它,而另一個執行緒正在執行以下任何函式時,是未定義行為:fprintfisprintiswdigitlocaleconvtolowerfscanfispunctiswgraphmblentoupperisalnumisspaceiswlowermbstowcstowlowerisalphaisupperiswprintmbtowctowupperisblankiswalnumiswpunctsetlocalewcscolliscntrliswalphaiswspacestrcollwcstodisdigitiswblankiswupperstrerrorwcstombsisgraphiswcntrliswxdigitstrtodwcsxfrmisloweriswctypeisxdigit

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 區域設定名稱列表.