strxfrm
|
定義先ヘッダ
<string.h>
|
||
| (C99まで) | ||
| (C99以降) | ||
src
が指すヌル終端バイト文字列を、現在のCロケールにおいて、変換後の2つの文字列を
strcmp
で比較した結果が、元の文字列を
strcoll
で比較した結果と同じになるように、実装定義の形式に変換します。
変換された文字列の最初の
count
文字が終端のnull文字を含めて宛先に書き込まれ、完全な変換された文字列の長さが終端のnull文字を除いて返されます。
dest
配列が十分な大きさでない場合、動作は未定義です。
dest
と
src
がオーバーラップする場合、動作は未定義です。
count
が
0
の場合、
dest
はヌルポインタでも許可されます。
目次 |
注記
変換された文字列全体を受け取ることができる正しいバッファの長さは 1 + strxfrm ( NULL , src, 0 )
この関数は、同じ文字列または文字列のセットを使用して複数のロケール依存の比較を行う場合に使用されます。なぜなら、すべての文字列を一度だけ変換するために
strxfrm
を使用し、その後変換された文字列を
strcmp
で比較する方が効率的であるためです。
パラメータ
| dest | - | 変換後の文字列が書き込まれる配列の最初の要素へのポインタ |
| src | - | 変換対象のヌル終端バイト文字列の最初の文字へのポインタ |
| count | - | 書き込まれる最大文字数 |
戻り値
変換後の文字列の長さ。終端のnull文字は含みません。
例
#include <stdio.h> #include <string.h> #include <locale.h> int main(void) { setlocale(LC_COLLATE, "cs_CZ.iso88592"); const char *in1 = "hrnec"; char out1[1+strxfrm(NULL, in1, 0)]; strxfrm(out1, in1, sizeof out1); const char *in2 = "chrt"; char out2[1+strxfrm(NULL, in2, 0)]; strxfrm(out2, in2, sizeof out2); printf("In the Czech locale: "); if(strcmp(out1, out2) < 0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); printf("In lexicographical comparison: "); if(strcmp(in1, in2)<0) printf("%s before %s\n",in1, in2); else printf("%s before %s\n",in2, in1); }
出力例:
In the Czech locale: hrnec before chrt In lexicographical comparison: chrt before hrnec
参考文献
- C17規格 (ISO/IEC 9899:2018):
-
- 7.24.4.5 strxfrm関数 (p: 267)
- C11規格 (ISO/IEC 9899:2011):
-
- 7.24.4.5 strxfrm関数 (p: 366-367)
- C99規格 (ISO/IEC 9899:1999):
-
- 7.21.4.5 strxfrm関数 (p: 329-330)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 4.11.4.5 strxfrm関数
関連項目
|
現在のロケールに従って2つの文字列を比較する
(function) |
|
|
(C95)
|
現在のロケールに従って2つのワイド文字列を比較する
(function) |
|
2つの文字列を比較する
(function) |
|
|
(C95)
|
ワイド文字列を変換して、
wcscmp
が
wcscoll
と同じ結果を生成するようにする
(function) |
|
C++ documentation
for
strxfrm
|
|