名前空間
変種
操作

strxfrm

提供: cppreference.com
< c‎ | string‎ | byte
ヘッダ <string.h> で定義
size_t strxfrm( char          *dest, const char          *src,
                size_t count );
(C99以前)
size_t strxfrm( char *restrict dest, const char *restrict src,
                size_t count );
(C99およびそれ以降)

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

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

dest 配列が十分大きくない場合、動作は未定義です。 destsrc がオーバーラップしている場合、動作は未定義です。

count0 の場合、 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

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.24.4.5 The strxfrm function (p: 366-367)
  • C99 standard (ISO/IEC 9899:1999):
  • 7.21.4.5 The strxfrm function (p: 329-330)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 4.11.4.5 The strxfrm function

[編集] 関連項目

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