wcsxfrm
來自 cppreference.com
在標頭檔案 <wchar.h> 中定義 |
||
(直到 C99) (自 C95 起) |
||
(C99 起) | ||
將 `src` 指向的以空字元結尾的寬字串轉換為實現定義的形式,使得使用 wcscmp 比較兩個轉換後的字串的結果與在當前 C 語言環境中,使用 wcscoll 比較原始字串的結果相同。
轉換後的字串的前 `count` 個字元(包括終止空字元)寫入目標地址,並返回完整轉換後字串的長度(不包括終止空字元)。
如果 `count` 為 0,則 `dest` 允許為 null 指標。
目錄 |
[編輯] 注意
可以接收整個轉換後字串的緩衝區的正確長度是 1+wcsxfrm(NULL, src, 0)
此函式用於使用相同寬字串或一組寬字串進行多次依賴於區域設定的比較時,因為使用 `wcsxfrm` 僅轉換所有字串一次,然後使用 wcscmp 比較轉換後的寬字串會更有效率。
[編輯] 引數
dest | - | 指向寬空終止字串的第一個元素的指標,用於寫入轉換後的字串 |
src | - | 指向要轉換的空終止寬字元字串的指標 |
count | - | 要輸出的最大字元數 |
[編輯] 返回值
轉換後的寬字串的長度,不包括終止空字元。
[編輯] 示例
執行此程式碼
#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { setlocale(LC_ALL, "sv_SE.utf8"); const wchar_t *in1 = L"\u00e5r"; wchar_t out1[1+wcsxfrm(NULL, in1, 0)]; wcsxfrm(out1, in1, sizeof out1/sizeof *out1); const wchar_t *in2 = L"\u00e4ngel"; wchar_t out2[1+wcsxfrm(NULL, in2, 0)]; wcsxfrm(out2, in2, sizeof out2/sizeof *out2); printf("In the Swedish locale: "); if(wcscmp(out1, out2) < 0) printf("%ls before %ls\n", in1, in2); else printf("%ls before %ls\n", in2, in1); printf("In lexicographical comparison: "); if(wcscmp(in1, in2) < 0) printf("%ls before %ls\n", in1, in2); else printf("%ls before %ls\n", in2, in1); }
輸出
In the Swedish locale: år before ängel In lexicographical comparison: ängel before år