wcsxfrm
|
定義先ヘッダ
<wchar.h>
|
||
|
(C99まで)
(C95以降) |
||
| (C99以降) | ||
ヌル終端ワイド文字列
src
が指す文字列を、現在のCロケールにおいて、変換後の2つの文字列を
wcscmp
で比較した結果が、元の文字列を
wcscoll
で比較した結果と同一となる、実装定義の形式に変換します。
変換された文字列の最初の
count
文字が終端のnull文字を含めてdestinationに書き込まれ、終端のnull文字を除いた完全な変換後の文字列の長さが返されます。
count
が
0
の場合、
dest
はヌルポインタでも許可されます。
目次 |
注記
変換後の文字列全体を受け取ることができる正しいバッファの長さは 1 + wcsxfrm ( NULL , src, 0 )
この関数は、同じワイド文字列またはワイド文字列のセットを使用して複数のロケール依存の比較を行う場合に使用されます。なぜなら、すべての文字列を一度だけ変換するために
wcsxfrm
を使用し、その後変換されたワイド文字列を
wcscmp
で比較する方が効率的であるためです。
パラメータ
| dest | - | 変換された文字列を書き込むための、ワイドナル終端文字列の最初の要素へのポインタ |
| src | - | 変換対象のナル終端ワイド文字列へのポインタ |
| count | - | 出力する最大文字数 |
戻り値
変換後のワイド文字列の長さ(終端のnull文字を含まない)。
例
#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)
関連項目
|
現在のロケールに従って2つの文字列を比較する
(関数) |
|
|
(C95)
|
現在のロケールに従って2つのワイド文字列を比較する
(関数) |
|
(C95)
|
2つのワイド文字列を比較する
(関数) |
|
strcmpがstrcollと同じ結果を生成するように文字列を変換する
(関数) |
|
|
C++ドキュメント
for
wcsxfrm
|
|