Namespaces
Variants

wcstok, wcstok_s

From cppreference.net
< c ‎ | string ‎ | wide
헤더 파일에 정의됨 <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부터)
1) 널 종료 와이드 문자열 str 이 가리키는 문자열에서 다음 토큰을 찾습니다. 구분 문자는 널 종료 와이드 문자열 delim 이 가리키는 문자열로 식별됩니다.
이 함수는 동일한 문자열에서 연속적인 토큰을 얻기 위해 여러 번 호출되도록 설계되었습니다.
  • 만약 str ! = NULL 이면, 이 호출은 해당 와이드 문자열에 대한 첫 번째 wcstok 호출로 처리됩니다. 함수는 delim 에 포함되지 않는 첫 번째 와이드 문자를 검색합니다.
  • 해당하는 와이드 문자가 발견되지 않으면, str 내에 토큰이 전혀 존재하지 않는 것이며, 함수는 널 포인터를 반환합니다.
  • 해당하는 와이드 문자가 발견되면, 이것이 토큰의 시작점 입니다. 함수는 그 지점부터 delim 에 포함 되는 첫 번째 와이드 문자를 검색합니다.
  • 해당하는 와이드 문자가 발견되지 않으면, str 에는 단 하나의 토큰만 존재하며, 이후 wcstok 호출은 널 포인터를 반환합니다.
  • 해당하는 와이드 문자가 발견되면, 그것은 널 와이드 문자 L ' \0 ' 대체 되며, 파서 상태(일반적으로 다음 와이드 문자를 가리키는 포인터)는 사용자가 제공한 위치 * ptr 에 저장됩니다.
  • 그런 다음 함수는 토큰의 시작점을 가리키는 포인터를 반환합니다.
  • 만약 str == NULL 이면, 이 호출은 wcstok 의 후속 호출로 처리됩니다: 함수는 동일한 * ptr 을 사용하여 이전 호출에서 중단된 지점부터 계속 진행합니다. 이 동작은 마지막으로 발견된 토큰 다음에 오는 와이드 문자를 가리키는 포인터가 str 으로 전달된 경우와 동일합니다.
2) (1) 과 동일하지만, 매 단계마다 str 에서 확인할 남은 문자 수를 * strmax 에 기록합니다. 반복 호출(null str 사용) 시에는 이전 호출에서 저장된 값으로 strmax ptr 를 모두 전달해야 합니다. 또한 다음 런타임 오류들이 검출되면, ptr 가 가리키는 객체에 아무것도 저장하지 않고 현재 설치된 constraint handler 함수를 호출합니다:
  • 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)

참고 항목

바이트 문자열에서 다음 토큰을 찾음
(함수)