Namespaces
Variants

wcsxfrm

From cppreference.net
< c ‎ | string ‎ | wide
헤더 파일에 정의됨 <wchar.h>
size_t wcsxfrm ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(C99 이전)
(C95 이후)
size_t wcsxfrm ( wchar_t * restrict dest, const wchar_t * restrict src, size_t count ) ;
(C99 이후)

src 가 가리키는 널 종료 와이드 문자열을 구현에서 정의된 형태로 변환하여, 현재 C 로케일에서 변환된 두 문자열을 wcscmp 로 비교한 결과가 원본 문자열을 wcscoll 로 비교한 결과와 동일하도록 합니다.

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

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

목차

참고 사항

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

이 함수는 동일한 와이드 문자열 또는 와이드 문자열 집합을 사용하여 여러 로케일 종속 비교를 수행할 때 사용됩니다. 왜냐하면 모든 문자열을 한 번만 변환하기 위해 wcsxfrm 을 사용하고, 이후 변환된 와이드 문자열을 wcscmp 로 비교하는 것이 더 효율적이기 때문입니다.

매개변수

dest - 변환된 문자열을 쓸 널 종료 와이드 문자열의 첫 번째 요소를 가리키는 포인터
src - 변환할 널 종료 와이드 문자 문자열을 가리키는 포인터
count - 출력할 최대 문자 수

반환값

변환된 와이드 문자열의 길이로, 종료 널 문자는 포함하지 않습니다.

예제

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
    setlocale(LC_ALL, "sv_SE.utf8");
    const wchar_t *in1 = L"\u00e5r";
    wchar_t out1[1+wcsxfrm(NULL, in1, 0)];
    wcsxfrm(out1, in1, sizeof out1/sizeof *out1);
    const wchar_t *in2 = L"\u00e4ngel";
    wchar_t out2[1+wcsxfrm(NULL, in2, 0)];
    wcsxfrm(out2, in2, sizeof out2/sizeof *out2);
    printf("In the Swedish locale: ");
    if(wcscmp(out1, out2) < 0)
         printf("%ls before %ls\n", in1, in2);
    else
         printf("%ls before %ls\n", in2, in1);
    printf("In lexicographical comparison: ");
    if(wcscmp(in1, in2) < 0)
         printf("%ls before %ls\n", in1, in2);
    else
         printf("%ls before %ls\n", in2, in1);
}

출력:

In the Swedish locale: år before ängel
In lexicographical comparison: ängel before år

참고문헌

  • C11 표준 (ISO/IEC 9899:2011):
  • 7.29.4.4.4 wcsxfrm 함수 (p: 434-435)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.24.4.4.4 wcsxfrm 함수 (p: 380-381)

참조 항목

현재 로캘에 따라 두 문자열을 비교함
(함수)
(C95)
현재 로캘에 따라 두 와이드 문자열을 비교함
(함수)
(C95)
두 와이드 문자열을 비교함
(함수)
strcmp가 strcoll과 동일한 결과를 생성하도록 문자열을 변환함
(함수)
C++ 문서 for wcsxfrm