wcstok, wcstok_s
|
헤더 파일에 정의됨
<wchar.h>
|
||
| (1) | ||
|
wchar_t
*
wcstok
(
wchar_t
*
str,
const
wchar_t
*
delim,
wchar_t
**
ptr
)
;
|
(C95부터)
(C99까지) |
|
|
wchar_t
*
wcstok
(
wchar_t
*
restrict
str,
const
wchar_t
*
restrict
delim,
wchar_t ** restrict ptr ) ; |
(C99부터) | |
|
wchar_t
*
wcstok_s
(
wchar_t
*
restrict
str, rsize_t
*
restrict
strmax,
const wchar_t * restrict delim, wchar_t ** restrict ptr ) ; |
(2) | (C11부터) |
-
-
만약
str
!
=
NULL
이면, 이 호출은 해당 와이드 문자열에 대한 첫 번째
wcstok호출로 처리됩니다. 함수는 delim 에 포함되지 않는 첫 번째 와이드 문자를 검색합니다.
-
- 해당하는 와이드 문자가 발견되지 않으면, str 내에 토큰이 전혀 존재하지 않는 것이며, 함수는 널 포인터를 반환합니다.
- 해당하는 와이드 문자가 발견되면, 이것이 토큰의 시작점 입니다. 함수는 그 지점부터 delim 에 포함 되는 첫 번째 와이드 문자를 검색합니다.
-
-
해당하는 와이드 문자가 발견되지 않으면,
str
에는 단 하나의 토큰만 존재하며, 이후
wcstok호출은 널 포인터를 반환합니다. - 해당하는 와이드 문자가 발견되면, 그것은 널 와이드 문자 L ' \0 ' 로 대체 되며, 파서 상태(일반적으로 다음 와이드 문자를 가리키는 포인터)는 사용자가 제공한 위치 * ptr 에 저장됩니다.
-
해당하는 와이드 문자가 발견되지 않으면,
str
에는 단 하나의 토큰만 존재하며, 이후
- 그런 다음 함수는 토큰의 시작점을 가리키는 포인터를 반환합니다.
-
만약
str
==
NULL
이면, 이 호출은
wcstok의 후속 호출로 처리됩니다: 함수는 동일한 * ptr 을 사용하여 이전 호출에서 중단된 지점부터 계속 진행합니다. 이 동작은 마지막으로 발견된 토큰 다음에 오는 와이드 문자를 가리키는 포인터가 str 으로 전달된 경우와 동일합니다.
-
만약
str
!
=
NULL
이면, 이 호출은 해당 와이드 문자열에 대한 첫 번째
-
- strmax , delim , 또는 ptr 이 null 포인터인 경우
- 비초기 호출(null str 사용) 시 * ptr 이 null 포인터인 경우
- 첫 호출 시 * strmax 이 0이거나 RSIZE_MAX / sizeof ( wchar_t ) 보다 큰 경우
- 토큰의 끝을 찾는 검색이 null 종결자를 만나지 못하고 소스 문자열의 끝(초기 * strmax 값으로 측정)에 도달하는 경우
-
모든 bounds-checked 함수와 마찬가지로,
wcstok_s는 구현에서 __STDC_LIB_EXT1__ 를 정의하고, 사용자가 <wchar.h> 를 포함하기 전에 __STDC_WANT_LIB_EXT1__ 를 정수 상수 1 으로 정의한 경우에만 사용 가능함이 보장됩니다.
목차 |
매개변수
| str | - | 토큰화할 null 종료 와이드 문자열에 대한 포인터 |
| delim | - | 구분자를 식별하는 null 종료 와이드 문자열에 대한 포인터 |
| ptr | - |
wchar_t
*
타입의 객체에 대한 포인터로,
wcstok
와
wcstok_s
모두에서 파서의 내부 상태를 저장하는 데 사용됨
|
| strmax | - | 처음에 str 의 크기를 보유하는 객체에 대한 포인터: wcstok_s는 검토가 남은 문자 수를 저장함 |
반환값
다음 토큰의 시작 부분에 대한 포인터를 반환하거나, 더 이상 토큰이 없을 경우 null 포인터를 반환합니다.
참고
이 함수는 파괴적입니다: 문자열
str
의 요소들에
L
'
\0
'
문자들을 기록합니다. 특히, 와이드 문자열 리터럴은
wcstok
의 첫 번째 인수로 사용될 수 없습니다.
strtok
과 달리,
wcstok
는 정적 저장소를 갱신하지 않습니다: 파서 상태를 사용자가 제공한 위치에 저장합니다.
대부분의 다른 토크나이저와 달리,
wcstok
에서는 각 후속 토큰에 대한 구분자가 다를 수 있으며, 이전 토큰의 내용에 따라 달라질 수도 있습니다.
wcstok_s 의 구현은 Windows CRT 에서 C 표준과 호환되지 않으며, 이는 단순히 wcstok 의 별칭일 뿐입니다.
예제
#include <stdio.h> #include <wchar.h> int main(void) { wchar_t input[] = L"A bird came down the walk"; printf("Parsing the input string '%ls'\n", input); wchar_t* buffer; wchar_t* token = wcstok(input, L" ", &buffer); while (token) { printf("%ls\n", token); token = wcstok(NULL, L" ", &buffer); } printf("Contents of the input string now: '"); for (size_t n = 0; n < sizeof input / sizeof *input; ++n) input[n] ? printf("%lc", input[n]) : printf("\\0"); puts("'"); }
출력:
Parsing the input string 'A bird came down the walk' A bird came down the walk Contents of the input string now: 'A\0bird\0came\0down\0the\0walk\0'
참고문헌
- C11 표준 (ISO/IEC 9899:2011):
-
- 7.29.4.5.7 The wcstok 함수 (p: 437-438)
-
- K.3.9.2.3.1 The wcstok_s 함수 (p: 645-646)
- C99 표준 (ISO/IEC 9899:1999):
-
- 7.24.4.5.7 wcstok 함수 (p: 383-384)
참고 항목
|
(C11)
|
바이트 문자열에서 다음 토큰을 찾음
(함수) |
|
C++ documentation
for
wcstok
|
|