wcsxfrm
From cppreference.com
| ヘッダー <wchar.h> で定義 |
||
| (C99まで) (C95 以降) |
||
| (C99以降) | ||
src が指すヌル終端ワイド文字列を、現在の C ロケールにおいて、変換後の 2 つの文字列を wcscmp で比較した結果が、元の文字列を wcscoll で比較した結果と同じになるような、実装定義の形式に変換します。
変換後の文字列の最初の count 文字が宛先に書き込まれます。これには終端のヌル文字も含まれます。完全な変換後文字列の長さが返されます。この長さには終端のヌル文字は含まれません。
count が 0 の場合、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標準 (ISO/IEC 9899:2011)
- 7.29.4.4.4 The wcsxfrm function (p: 434-435)
- C99標準 (ISO/IEC 9899:1999)
- 7.24.4.4.4 The wcsxfrm function (p: 380-381)
[編集] 関連項目
| 現在のロケールに従って2つの文字列を比較する (関数) | |
| (C95) |
現在のロケールに従って2つのワイド文字列を比較する (関数) |
| (C95) |
2つのワイド文字列を比較する (関数) |
| strcmp が strcoll と同じ結果になるように文字列を変換する (関数) | |
| C++ ドキュメント for wcsxfrm
| |