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 로캘에서 변환된 두 문자열을 strcmp 로 비교한 결과가 원본 문자열을 strcoll 로 비교한 결과와 동일하도록 합니다.

변환된 문자열의 첫 번째 count 문자는 종료 널 문자를 포함하여 대상에 기록되며, 전체 변환된 문자열의 길이는 종료 널 문자를 제외하고 반환됩니다.

dest 배열이 충분히 크지 않을 경우 동작은 정의되지 않습니다. dest src 가 서로 겹칠 경우 동작은 정의되지 않습니다.

만약 count 0 이면, dest 는 null 포인터가 허용됩니다.

목차

참고 사항

변환된 전체 문자열을 수신할 수 있는 올바른 버퍼의 길이는 1 + strxfrm ( NULL , src, 0 )

이 함수는 동일한 문자열 또는 문자열 집합을 사용하여 여러 로케일 의존 비교를 수행할 때 사용됩니다. strxfrm 을 사용하여 모든 문자열을 한 번만 변환한 후, 변환된 문자열을 strcmp 로 비교하는 것이 더 효율적이기 때문입니다.

매개변수

dest - 변환된 문자열이 기록될 배열의 첫 번째 요소를 가리키는 포인터
src - 변환할 null 종료 바이트 문자열의 첫 번째 문자를 가리키는 포인터
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 함수

참고 항목

현재 로캘에 따라 두 문자열을 비교합니다
(함수)
(C95)
현재 로캘에 따라 두 와이드 문자열을 비교합니다
(함수)
두 문자열을 비교합니다
(함수)
(C95)
와이드 문자열을 변환하여 wcscmp wcscoll 와 동일한 결과를 생성하도록 합니다
(함수)