函式
<clocale>

setlocale

char* setlocale (int category, const char* locale);
設定或獲取本地化資訊
為當前程式設定要使用的本地化資訊,可以更改整個區域設定或其中的一部分。該函式也可用於獲取當前區域設定的名稱,只需將 NULL 作為 locale 引數的值傳遞即可。

區域設定包含有關如何解釋和執行某些輸入/輸出和轉換操作的資訊,其中考慮了特定於位置和語言的設定。

大多數執行環境已根據使用者偏好或本地化設定了某些區域資訊。但是,與此係統區域設定無關,在啟動時,所有 C 程式都設定了 "C" 區域設定,這是一個相當中立的區域設定,具有最少的本地化資訊,使得程式的執行結果是可預測的。為了使用環境中設定的預設區域設定,可以呼叫此函式並以 "" 作為 locale 引數。

程式啟動時,選擇的區域設定是 "C" locale,這與呼叫 setlocale(LC_ALL,"C") 所設定的相同。

透過呼叫 setlocale(LC_ALL,"") 可以選擇環境中設定的區域設定。

呼叫此函式所影響的當前區域設定部分由 category 引數指定。

引數

類別
受影響的區域設定部分。它是 <clocale> 中定義為宏的以下常量值之一
受影響的區域設定部分
LC_ALL整個區域設定。
LC_COLLATE影響 strcollstrxfrm 的行為。
LC_CTYPE影響字元處理函式(<cctype> 中的所有函式,除了 isdigitisxdigit),以及多位元組和寬字元函式。
LC_MONETARY影響由 localeconv 返回的貨幣格式化資訊。
LC_NUMERIC影響格式化輸入/輸出操作和字串格式化函式中的小數點字元,以及由 localeconv 返回的非貨幣資訊。
LC_TIME影響 strftime 的行為。
locale
包含 C 區域設定名稱的 C 字串。這些是系統特定的,但至少必須存在以下兩個區域設定
區域設定名稱描述
"C"最小 "C" 區域設定
""環境的預設區域設定
如果此引數的值為 NULL,則該函式不會對當前區域設定進行任何更改,但仍會返回當前區域設定的名稱。

返回值

成功時,返回一個指向 C 字串的指標,該字串標識當前為 category 設定的區域設定。如果 categoryLC_ALL 並且區域設定的不同部分被設定為不同的值,則返回的字串以一種可能因庫實現而異的格式提供此資訊。

如果函式未能設定新的區域設定,則此項不會被修改,並返回一個空指標。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 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;
}

執行上述程式碼時,可能的輸出之一是
Locale is: C
Date is: 01/15/07 13:33:47
Currency symbol is: 
-
Locale is: English_United States.1252
Date is: 1/15/07 1:33:47 PM
Currency symbol is: $
-


資料競爭

更改區域設定可能會與對同一函式或受區域設定影響的任何 C 庫函式的併發呼叫產生資料競爭。

異常 (C++)

無異常保證:此函式從不丟擲異常。

另見