strxfrm
From cppreference.com
| ヘッダー <string.h> で定義 |
||
| (C99まで) | ||
| (C99以降) | ||
「src が指すヌル終端バイト文字列を、現在の C ロケールにおいて、strcmp で2つの変換された文字列を比較した結果が、strcoll で元の文字列を比較した結果と同じになるような、実装定義の形式に変換します。」
「変換された文字列の最初の count 文字(終端ヌル文字を含む)が宛先に書き込まれ、終端ヌル文字を含まない完全な変換文字列の長さが返されます。」
「dest 配列が十分に大きくない場合、動作は未定義です。dest と src が重複する場合、動作は未定義です。」
「count が 0 の場合、dest はヌルポインタであってもかまいません。」
目次 |
[編集] 注釈
「変換された文字列全体を受け取ることができるバッファの正しい長さは、1+strxfrm(NULL, src, 0) です。」
「この関数は、同じ文字列または文字列セットを使用して複数のロケール依存比較を行う場合に使用されます。これは、strxfrm を使用してすべての文字列を一度だけ変換し、その後変換された文字列を strcmp で比較する方が効率的であるためです。」
[編集] パラメータ
| dest | - | 「変換された文字列が書き込まれる配列の最初の要素へのポインタ」 |
| src | - | 「変換されるヌル終端バイト文字列の最初の文字へのポインタ」 |
| count | - | 「書き込まれる最大文字数」 |
[編集] 戻り値
「変換された文字列の長さ(終端ヌル文字を含まない)。」
[編集] 例
このコードを実行
#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つの文字列を比較する (関数) | |
| (C95) |
現在のロケールに従って2つのワイド文字列を比較する (関数) |
| 2つの文字列を比較する (関数) | |
| (C95) |
wcscmpがwcscollと同じ結果を生成するようにワイド文字列を変換する (関数) |
| C++ドキュメント for strxfrm
| |