名稱空間
變體
操作

wcsxfrm

來自 cppreference.com
< c‎ | string‎ | wide
在標頭檔案 <wchar.h> 中定義
size_t wcsxfrm( wchar_t* dest, const wchar_t* src, size_t count );
(直到 C99)
(自 C95 起)
size_t wcsxfrm( wchar_t* restrict dest, const wchar_t* restrict src, size_t count );
(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

[編輯] 參考

  • C11 標準 (ISO/IEC 9899:2011)
  • 7.29.4.4.4 wcsxfrm 函式 (p: 434-435)
  • C99 標準 (ISO/IEC 9899:1999)
  • 7.24.4.4.4 wcsxfrm 函式 (p: 380-381)

[編輯] 另請參閱

根據當前區域設定比較兩個字串
(函式) [編輯]
根據當前語言環境比較兩個寬字串
(函式) [編輯]
(C95)
比較兩個寬字串
(函式) [編輯]
轉換字串,使 strcmp 產生與 strcoll 相同的結果
(函式) [編輯]
C++ documentation for wcsxfrm