Namespaces
Variants

strxfrm

From cppreference.net
< 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以降)

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)