名前空間
変種
操作

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およびそれ以降)

現在の C のロケールにおいて、 wcscoll で2つの文字列を比較したのと同じ結果を wcscmp で変換後の2つの文字列を比較することで得られるように、 src の指すヌル終端ワイド文字列を処理系定義の形式に変換します。

変換後の文字列の最初の count 個の文字 (終端のヌル文字を含む) が dest に書き込まれ、完全な変換後の文字列の長さ (終端のヌル文字を除く) が返されます。

count0 の場合、 dest はヌルポインタでも構いません。

目次

[編集] ノート

変換後の文字列全体を受け取れるバッファの正しい長さは 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 standard (ISO/IEC 9899:2011):
  • 7.29.4.4.4 The wcsxfrm function (p: 434-435)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.24.4.4.4 The wcsxfrm function (p: 380-381)

[編集] 関連項目

現在のロケールに従って2つの文字列を比較します
(関数) [edit]
現在のロケールに従ってワイド文字列を比較します
(関数) [edit]
(C95)
2つのワイド文字列を比較します
(関数) [edit]
strcoll と同じ結果を strcmp で得られるように文字列を変換します
(関数) [edit]