C 언어 strtok() 함수 개요
strtok() 함수는 C 언어의 <string.h> 헤더 파일에 포함된 표준 라이브러리 함수입니다. 이 함수를 사용하려면 소스 코드 상단에 #include <string.h>를 추가해야 합니다.
strtok() 함수의 문법
char* strtok(char* string, const char* limiter);
이 함수는 두 개의 매개변수를 받습니다. 첫 번째는 분할하고자 하는 입력 문자열(string)이며, 두 번째는 구분자로 사용할 문자(limiter)입니다. strtok()은 지정된 구분자를 기준으로 문자열을 여러 개의 토큰(token)으로 나눕니다.
strtok() 함수의 동작 원리
strtok()을 호출하면 문자열 목록 전체가 아닌 첫 번째 토큰 하나만 반환됩니다. 이후 토큰들을 얻으려면 입력 문자열 자리에 NULL을 넣고 함수를 반복적으로 호출해야 합니다. 즉, 일반적으로 strtok(NULL, delim) 형태로 계속 호출하다가 반환값이 NULL이 되면 더 이상 남은 토큰이 없다는 의미이므로 호출을 중단하면 됩니다.
예제 프로그램
다음은 strtok() 함수의 사용법을 보여주는 C 프로그램입니다.
#include <stdio.h>
#include <string.h>
int main() {
char input_string[] = "Hello Tutorials Point!";
char token_list[20][20];
char* token = strtok(input_string, " ");
int num_tokens = 0; // 토큰 리스트의 인덱스. 리스트에 추가할 때 사용
while (token != NULL) {
strcpy(token_list[num_tokens], token); // 토큰 리스트에 복사
num_tokens++;
token = strtok(NULL, " "); // 다음 토큰 가져오기. 입력이 NULL임에 주목!
}
// 토큰 리스트 출력
printf("Token List:\n");
for (int i=0; i < num_tokens; i++) {
printf("%s\n", token_list[i]);
}
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Token List: Hello Tutorials Point!
코드 설명
입력 문자열은 "Hello Tutorials Point!"이며, 공백(" ")을 구분자로 사용해 문자열을 토큰화하고 있습니다.
첫 번째 토큰은 strtok(input, " ") 호출을 통해 얻습니다. 여기서 큰따옴표 안의 공백이 구분자 역할을 하며, 하나의 문자로 이루어진 문자열입니다.
이후에는 strtok(NULL, " ")을 반복 호출하여 나머지 토큰들을 순차적으로 가져오고, strtok()이 NULL을 반환할 때까지 루프를 돌게 됩니다.
참고 사항
strtok()은 내부적으로 원본 문자열을 수정한다는 점에 유의해야 합니다. 함수는 구분자가 있던 위치를 NULL 문자('\0')로 대체하기 때문에, 원본 문자열을 보존해야 한다면 사전에 복사본을 만들어 사용하는 것이 좋습니다. 또한 이 함수는 스레드에 안전하지 않으므로 멀티스레드 환경에서는 POSIX의 strtok_r()과 같은 재진입 가능한(reentrant) 버전을 사용하는 것이 권장됩니다.