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


setlocale函數

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

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

 

第一個參數category:

用來設置地域設置的影響范圍。地域設置包含日期格式、數字格式、貨幣格式、字符處理、字符比較等多個方面的內容,當前的地域設置可以只影響某一方面的內容,也可以影響所有的內容,

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

 

 

第二個參數locale:

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

 

setlocale函數的返回值:

如果 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);

運行結果:

 

因為操作系統是中文環境,所以上面的代碼中可以改為效果是一樣的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM