develop

strtok()

찬이 2010. 7. 14. 16:00
strtok()는 문자열을 분리해주는 C의 대표적인 함수이다.

MSDN에서 정의하고 있는 prototype은 아래와 같다.

char *strtok( char *strToken, const char *strDelimit );

strToken 문자열에서 strDelimit 에 의해 분리되는 문자열을 리턴해주는 함수이다.


그럼 이 함수의 특징을 살펴보자.

첫째, strDelimit 에 포함된 글자를 구분자로 하는 문자를 돌려준다.
char string[] = "What a beautiful girl!";
printf( "%s", strtok( string, "a" ) );

결과)
Wh


둘째, strDelimit가 여러글자일 경우, 구분할 문자열이 아니라 문자들의 집합이다.
char string[] = "What a beautiful girl!";
printf( "%s", strtok( string, "beautiful" ) );

결과)
Wh

셋째, 찾은 구분자는 NULL로 변환한다.
char string[] = "What a beautiful girl!";
printf( "%s\n", strtok( string, "a" ) );
printf( "%s", string );

결과)
Wh
Wh

넷째, 반복적으로 실행할때에는 strToken 대신 NULL을 입력해준다.
char string[] = "What a beautiful girl!";
printf( "%s\n", strtok( string, "a" ) );
printf( "%s\n", strtok( NULL, "a" ) );
printf( "%s\n", strtok( NULL, "a" ) );
printf( "%s\n", string );

결과)
Wh
t
 be
utiful girl!

위에서 보는바와 같이 strToken은 NULL에 의해서 변형되므로, 문자열을 분리하는 동안 strToken의 값이 변하는 코드가 들어가게 되면, 예상치 못한 증상이 발생할 수 있다.

그러므로, 파일 등에서 데이터를 읽으면서 파싱하는 경우에는 데이터를 읽는 동작과 명백하게 구분해줘야한다.