STRTOK(3)

이름
strtok, strtok_r - 문자열에서 토큰들을 뽑아낸다.

사용법
#include <string.h>

char *strtok(char *s, const char *delim);

char *strtok_r(char *s, const char *delim, char **ptrptr);

설명
`토큰`이란 문자열 delim에 속하지 않는 문자들로 이루어진 비어 있지 않은 문자열이며 \0이나 delim에 있는 문자가 뒤따른다.

strtok() 함수는 문자열 s를 토큰으로 파싱하기 위해 사용된다. strtok()의 첫번째 인자로 s를 주면, 가장 앞에 있는 토큰을 구하고, 그 문자열안의 다음 토큰을 구하고자 할 때에는 첫번째 인자를 NULL로 설정하여야 한다. 각 호출은 다음 토큰에 대한 포인터를 반환하거나 더이상 토큰이 발견되지 않는다면 NULL을 반환한다.

토큰이 구분자로 끝난다면, 이 구분자는 \0로 겹쳐 쓰여지며 다음 문자에 대한 포인터가 strtok()에 대한 다음 호출을 위해 저장된다. 구분 문자열 delim는 각 호출시 다를수 있다.

strtok_r() 함수는 strtok() 와 동일하게 작동한다. 그러나 정적 버퍼를 사용하는 대신에 이 함수는 char * 포인터로 할당된 유저에 대한 포인터를 사용한다. 이 포인터, ptrptr 파라미터는 같은 문자열을 파싱하는 동안 같아야만 한다.

버그
이 함수를 사용해서는 안된다. 만일 사용해야 한다면, 다음을 주의하라:

    이 함수는 처음 인자를 수정한다.

    구분자의 원본은 잃게 된다.

    이 함수는 상수 문자열에서는 사용해서는 안된다.

    strtok () 함수는 파싱하는 동안 정적 버퍼를 사용한다. 그래서 thread safe가 아니다. 만일 이것이 문제라면 strtok_r () 를 사용해라.

반환값
strtok() 함수는 다음 토큰에 대한 포인터를 반환하거나 만일 더 이상 토큰이 없다면 NULL을 반환한다.

호환

strtok()
    SVID 3, POSIX, BSD 4.3, ISO 9899

strtok_r()
    POSIX.1c

관련 항목
index(3), memchr(3), rindex(3), strchr(3), strpbrk(3), strsep(3), strspn(3), strstr(3)

번역
정강훈 <skyeyes@soback.kornet.net> 2001년 2월 24일
한글 Manpage 프로젝트 (http://man.kldp.org) 2005년 2월 11일