setlocale()函數詳解——C語言

setlocale函數

函數原型:char* setlocale (int category, const char* locale);函數

setlocale位於頭文件,setlocale() 函數既能夠用來對當前程序進行地域設置(本地設置、區域設置),也能夠用來獲取當前程序的地域設置信息,使用setlocale須要兩個參數編碼

 

第一個參數category:spa

用來設置地域設置的影響範圍。地域設置包含日期格式、數字格式、貨幣格式、字符處理、字符比較等多個方面的內容,當前的地域設置能夠隻影響某一方面的內容,也能夠影響全部的內容,操作系統

category 的值不能隨便設置,必須使用 <locale.h> 中定義的宏3d

 

 

第二個參數locale:指針

用來設置地域設置的名稱(字符串),也就是設置爲哪一種地域,對於不一樣的平臺和不一樣的編譯器,地域設置的名稱可能會不一樣,C語言標準沒有干預太多。C語言標準只是規定,各個組織在實現編譯器時至少要支持如下三個名稱code

 

setlocale函數的返回值:blog

若是 setlocale() 執行成功,那麼返回一個指向字符串的指針,該字符串包含了當前地域設置的名稱。也就是說,setlocale() 會將當前地域設置的名稱返回字符串

若是 setlocale() 執行失敗(例如爲 locale 指定的名稱不存在,就會致使地域設置失敗),那麼返回空指針NULL原型

 

若是程序中沒有用setlocale函數設置地域等其餘參數,那麼程序運行時locale 被初始化爲默認的 C locale,其採用的字符編碼是全部本地 ANSI 字符集編碼的公共部分,是用來書寫C語言源程序的最小字符集,

下面用setlocale來獲得當前使用的地域設置

char *p; p = setlocale(LC_ALL, NULL); printf("%s\n", p);

運行結果:

從上面能夠看出當前編譯器使用的地域設置是C,若是想用寬字符來輸出中文,卻仍然使用默認的地域設置(C)就會出現問題,下面嘗試用setlocale來解決寬字符輸出中文的問題

wchar_t ss[20]; char *p; p = setlocale(LC_ALL, NULL); ss[0] = _T(''); ss[1] = _T(''); ss[2] = _T('\0'); wprintf(L"%ls\n", ss); printf("地域設置:%s\n", p);

運行結果:

從上面的運行結果能夠看出'中' '文'兩個字並無被正確的輸出,由於locale被初始化爲默認的C,其採用的字符編碼是全部本地ANSI字符集編碼的公共部分,是用來書寫C語言源程序的最小字符集,下面用setlocale來把地域設置爲簡體中文,修改後的代碼以下:

wchar_t ss[20]; char *p; p = setlocale(LC_ALL, ""); ss[0] = _T(''); ss[1] = _T(''); ss[2] = _T('\0'); wprintf(L"%ls\n", ss); printf("地域設置:%s\n", p);

運行結果:

 

由於操做系統是中文環境,因此上面的代碼中能夠改成效果是同樣的

相關文章
相關標籤/搜索