strtok() — 스트링 토큰화

형식

#include <string.h>
char *strtok(char *string1, const char *string2);

언어 레벨

ANSI

스레드세이프

아니오

대신 strtok_r()을 사용합니다.

로케일 감지

이 함수의 작동은 현재 로케일의 LC_CTYPE 범주로 영향을 받을 수 있습니다. 자세한 정보는 CCSID 및 로케일 이해의 내용을 참조하십시오.

설명

strtok() 함수는 0개 이상의 토큰 시리즈로 string1을 읽고 string1에서 토큰 분리문자 역할을 하는 문자 세트로 string2를 읽습니다. string1의 토큰은 string2에서 하나 이상의 분리문자로 분리할 수 있습니다. string1의 토큰은 strtok() 함수에 대한 일련의 호출로 찾을 수 있습니다.

지정된 string1에 대한 strtok() 함수의 첫 번째 호출에서 strtok() 함수는 선행 분리문자를 건너뛰고 string1에서 첫 번째 토큰을 검색합니다. 첫 번째 토큰에 대한 포인터가 리턴됩니다.

NULL string1 인수로 strtok() 함수가 호출된 경우 마지막 널이 아닌 string1 매개변수의 저장된 사본에서 다음 토큰을 읽습니다. 각 분리문자는 널 문자로 대체됩니다. 분리문자 세트는 호출마다 달라질 수 있으므로 string2는 임의의 값을 사용할 수 있습니다. string1의 초기값은 strtok() 함수에 대한 호출 이후에 보존되지 않습니다.

strtok() 함수는 버퍼로 데이터를 기록합니다. 버퍼가 strtok() 함수로 손상되므로 토큰화할 스트링을 포함하는 중요하지 않은 버퍼로 함수를 전달해야 합니다.

리턴값

strtok() 함수를 처음 호출할 때 string1에서 첫 번째 토큰에 대한 포인터를 리턴합니다. 토큰 스트링이 동일한 나중 호출에서 strtok() 함수는 스트링에서 다음 토큰에 대한 포인터를 리턴합니다. 토큰이 더 없으면 NULL 포인터가 리턴됩니다. 모든 토큰은 널로 종료됩니다.
참고: strtok() 함수는 내부 정적 포인터를 사용하여 토큰화하려는 스트링에서 다음 토큰을 가리킵니다. strtok() 함수의 재입력 버전, strtok_r()(내부 정적 기억장치를 사용하지 않음)을 strtok() 함수 대신 사용할 수 있습니다.

루프를 사용할 때 이 예는 토큰이 남지 않을 때까지 스트링에서 쉼표로 분리된 토큰을 수집합니다. 예는 토큰 a string, of, tokens를 인쇄합니다.
#include <stdio.h>
#include <string.h>
 
int main(void)
{
   char *token, *string = "a string, of, ,tokens\0,after null terminator";
 
   /* the string pointed to by string is broken up into the tokens
      "a string", " of", " ", and "tokens" ; the null terminator (\0)
      is encountered and execution stops after the token "tokens"     */
   token = strtok(string, ",");
   do
   {
      printf("token: %s\n", token);
   }
   while (token = strtok(NULL, ","));
}
 
/*****************  Output should be similar to:  *****************
 
token: a string
token:  of
token:
token: tokens
*/