strxfrm
|
헤더 파일에 정의됨
<string.h>
|
||
| (C99 이전) | ||
| (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
와 동일한 결과를 생성하도록 합니다
(함수) |
|
C++ documentation
for
strxfrm
|
|