본문 바로가기
develop

strtok()

by 찬이 2010. 7. 14.
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의 값이 변하는 코드가 들어가게 되면, 예상치 못한 증상이 발생할 수 있다.

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

'develop' 카테고리의 다른 글

ASCII Character Code Table  (0) 2010.08.12
Ubuntu (우분투) ISO 다운받기  (1) 2010.08.12
Visual Studio Express Edition 2010, 무료로 설치하기  (41) 2010.06.04
char, short 대신에 int를 쓰자  (6) 2010.02.24
3GPP Specification Numbering  (0) 2010.02.24

댓글