다음을 통해 공유


strtok, _strtok_l, wcstok, _wcstok_l, _mbstok_mbstok_l

현재 로캘 또는 전달된 지정한 로캘을 사용하여 문자열의 다음 토큰을 찾습니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l을 참조하세요.

Important

Windows 런타임에서 실행되는 애플리케이션에서는 _mbstok_mbstok_l을 사용할 수는 없습니다. 자세한 내용은 유니버설 Windows 플랫폼 앱에서 지원되지 않는 CRT 함수를 참조하세요.

구문

char *strtok(
   char *strToken,
   const char *strDelimit
);
char *_strtok_l(
   char *strToken,
   const char *strDelimit,
   _locale_t locale
);
wchar_t *wcstok( /* Non-standard, define _CRT_NON_CONFORMING_WCSTOK to use */
   wchar_t *strToken,
   const wchar_t *strDelimit
);
wchar_t *wcstok(
   wchar_t *strToken,
   const wchar_t *strDelimit,
   wchar_t **context
);
wchar_t *_wcstok_l(
   wchar_t *strToken,
   const wchar_t *strDelimit,
   _locale_t locale
);
unsigned char *_mbstok(
   unsigned char *strToken,
   const unsigned char *strDelimit
);
unsigned char *_mbstok_l(
   unsigned char *strToken,
   const unsigned char *strDelimit,
   _locale_t locale
);

매개 변수

strToken
토큰을 하나 이상 포함하는 문자열입니다.

strDelimit
구분 기호 문자 집합입니다.

locale
사용할 로캘입니다.

context
파서가 다음에 호출 wcstok할 때 중단된 위치에서 계속 진행할 수 있도록 파서의 내부 상태를 저장하는 데 사용되는 메모리를 가리킵니다.

반환 값

strToken에서 발견된 다음 토큰에 대한 포인터를 반환합니다. 더 이상 토큰을 찾을 수 없으면 함수가 반환 NULL 됩니다. 각 호출은 strToken 반환된 토큰 이후에 발생하는 첫 번째 구분 기호에 대해 null 문자를 대체하여 수정합니다.

설명

strtok 함수는 strToken에서 다음 토큰을 찾습니다. strDelimit의 문자 집합은 현재 호출을 통해 strToken에서 찾을 토큰에 사용 가능한 구분 기호를 지정합니다. wcstok_mbstokstrtok의 와이드 문자 및 멀티바이트 문자 버전입니다. 인수 및 반환 값 wcstok 은 와이드 문자열입니다. 다단계 및 반환 값 _mbstok 은 멀티바이트 문자열입니다. 그렇지 않으면 이들 세 함수는 동일하게 작동합니다.

두 인수 버전은 wcstok 표준이 아닙니다. 해당 버전을 사용해야 하는 경우 앞에서 정의 _CRT_NON_CONFORMING_WCSTOK #include <wchar.h> 해야 합니다(또는 #include <string.h>).

Important

이러한 함수는 버퍼 오버런 문제로 인해 발생하는 잠재적인 위협을 일으킵니다. 버퍼 오버런 문제는 자주 사용되는 시스템 공격 방법으로, 불필요한 권한 상승을 초래합니다. 자세한 내용은 버퍼 오버런 방지를 참조하세요.

첫 번째 strtok 호출에서 함수는 선행 구분 기호를 건너뛰고 strToken의 첫 번째 토큰에 대한 포인터를 반환하여 null 문자로 토큰을 종료합니다. strtok에 대한 일련의 호출을 통해 나머지 strToken에서 더 많은 토큰을 분할할 수 있습니다. 각 호출은 strtok 해당 호출에서 반환된 후 token null 문자를 삽입하여 수정 strToken 합니다. strToken에서 다음 토큰을 읽으려면 strToken 인수에 NULL 값을 사용하여 strtok를 호출합니다. 인수 strtokNULL strToken 수정된 strToken토큰에서 다음 토큰을 검색합니다. strDelimit 인수는 구분 기호 집합이 달라질 수 있도록 호출 간에 어떤 값이든 가져올 수 있습니다.

출력 값은 로캘의 LC_CTYPE 범주 설정에 영향을 받습니다. 자세한 내용은 setlocale를 참조하세요.

_l 접미사가 없는 이러한 함수의 버전은 이 로캘 종속 동작에 현재 로캘을 사용합니다. 접미사가 있는 _l 버전은 전달된 로캘 매개 변수를 대신 사용한다는 점을 제외하고 동일합니다. 자세한 내용은 Locale을 참조하세요.

참고 항목

각 함수는 스레드 로컬 정적 변수를 사용하여 문자열을 토큰으로 구문 분석합니다. 따라서 여러 스레드가 부적절한 영향을 주지 않고 이러한 함수를 동시에 호출할 수 있습니다. 그러나 단일 스레드 내에서 이러한 함수 중 하나로 호출을 인터리빙하면 데이터가 손상되고 부정확한 결과가 생성될 가능성이 높습니다. 다른 문자열을 구문 분석할 때는 문자열 하나의 구문 분석을 완료한 후에 다음 문자열의 구문 분석을 시작하세요. 또한 다른 함수가 호출되는 루프 내에서 이러한 함수 중 하나를 호출할 때의 위험 가능성도 고려하세요. 다른 함수가 이러한 함수 중 하나를 사용하게 되면 인터리빙된 호출 시퀀스가 수행되어 데이터가 손상됩니다.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE_MBCS 정의되지 않음 정의된 _MBCS 정의된 _UNICODE
_tcstok strtok _mbstok wcstok
_tcstok _strtok_l _mbstok_l _wcstok_l

요구 사항

루틴에서 반환된 값 필수 헤더
strtok <string.h>
wcstok <string.h> 또는 <wchar.h>
_wcstok_l <tchar.h>
_mbstok, _mbstok_l <mbstring.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// crt_strtok.c
// compile with: /W3
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

int main( void )
{
   printf( "Tokens:\n" );

   // Establish string and get the first token:
   token = strtok( string, seps ); // C4996
   // Note: strtok is deprecated; consider using strtok_s instead
   while( token != NULL )
   {
      // While there are tokens in "string"
      printf( " %s\n", token );

      // Get next token:
      token = strtok( NULL, seps ); // C4996
   }
}
Tokens:
A
string
of
tokens
and
some
more
tokens

참고 항목

문자열 조작
Locale
멀티바이트 문자 시퀀스 해석
strcspn, wcscspn, _mbscspn_mbscspn_l
strspn, wcsspn, _mbsspn_mbsspn_l