strtok 함수란?
strtok 함수는 문자열을 구분자(delimiter)로 나누는 역할을 한다. C 표준 라이브러리인 <string.h>
에 정의되어 있으며, 문자열을 변경하지 않고 원래 문자열에서 토큰(token)을 추출한다.
strtok 함수의 사용법
strtok 함수의 원형은 다음과 같다.
char *strtok(char *str, const char *delim);
str
: 나눌 문자열을 가리키는 포인터. 최초 호출 시에는 문자열 전체를 넣어주고, 이후부터는 NULL로 지정하여 호출한다.delim
: 구분자 문자열을 가리키는 포인터. 문자열 중에 있는 구분자를 기준으로 토큰을 분리한다.
위 함수는 첫 번째 토큰을 반환하고, 그 이후에는 호출할 때마다 다음 토큰을 반환한다. 분리된 토큰은 원래의 문자열에서 NULL로 치환되므로, strtok 함수를 사용한 후에는 원본 문자열이 변경된다.
strtok_s 함수의 사용법
strtok_s 함수는 strtok 함수와 기능은 동일하지만, 보다 안전하게 사용할 수 있도록 개선된 버전이다. C11 표준에 추가되었으며, C11을 지원하는 컴파일러에서 사용할 수 있다.
strtok_s 함수의 원형은 다음과 같다.
char *strtok_s(char *str, const char *delim, char **context);
str
: 나눌 문자열을 가리키는 포인터. 최초 호출 시에는 문자열 전체를 넣어주고, 이후부터는 NULL로 지정하여 호출한다.delim
: 구분자 문자열을 가리키는 포인터. 문자열 중에 있는 구분자를 기준으로 토큰을 분리한다.context
: strtok_s 함수 내부에서 쓰이는 상태 정보를 나타내는 포인터. 최초 호출 및 이후 호출 시에는 같은 주소를 사용해야 한다.
strtok_s 함수는 세 번째 인자로 상태 정보를 나타내는 포인터(context)를 받아오는데, 이를 통해 여러 스레드에서 동시에 strtok_s 함수를 사용할 수 있다.
strtok 함수 예제
아래 예제는 구분자를 이용하여 문자열을 나누는 기능을 구현한 코드이다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,grape";
char *token;
token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
위 코드를 실행하면 다음과 같은 결과가 출력된다.
apple
banana
grape
strtok_s 함수 예제
아래 예제는 strtok_s 함수를 사용하여 동일한 기능을 구현한 코드이다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,grape";
char *token;
char *context = NULL;
token = strtok_s(str, ",", &context);
while (token != NULL) {
printf("%s\n", token);
token = strtok_s(NULL, ",", &context);
}
return 0;
}
위 코드를 실행하면 동일한 결과가 출력된다.
마무리
위 소개한 strtok 함수와 strtok_s 함수는 문자열을 구분자로 나누는 기능을 제공한다. strtok 함수는 원본 문자열을 변경하며, strtok_s 함수는 strtok 함수보다 보다 안전하게 사용할 수 있는 개선된 버전이다. 이러한 함수들을 효과적으로 사용하여 문자열을 처리할 수 있다.
댓글