목차
- strtok 함수란?
- strtok 함수 원형과 인자 및 반환 값 설명
- strtok를 사용하여 문자열 나누기 예제
- strtok 여러개의 토큰을 이용하여 문자열 나누기 예제
- 안전하게 strtok를 사용하는 방법
1. strtok 함수란?
strtok 함수는 C언어에서 문자열을 특정 구분자를 기준으로 토큰(token) 단위로 나누는 함수입니다.
토큰은 연속된 문자열의 일부로, 구분자에 따라 문자열이 분리됩니다.
2. strtok 함수 원형과 인자 및 반환 값 설명
strtok 함수의 원형과 인자, 반환 값에 대해 설명합니다.
char* strtok(char* str, const char* delim);
str
: 토큰을 나눌 대상이 되는 문자열. 첫 번째 호출 시에는 원본 문자열을 전달하고, 이후 호출 시에는NULL
을 전달해야 합니다.delim
: 토큰을 구분할 구분자 문자열. 여러 개의 구분자를 사용하려면 모든 구분자를 하나의 문자열로 작성해야 합니다.- 반환 값: 토큰으로 분리된 문자열의 포인터. 더 이상 토큰이 없으면
NULL
을 반환합니다.
3. strtok를 사용하여 문자열 나누기 예제
아래는 strtok
함수를 사용하여 문자열을 구분자를 기준으로 나누는 예제입니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,orange";
char* token = strtok(str, ",");
while (token != NULL) {
printf("Token: %s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
4. strtok 여러개의 토큰을 이용하여 문자열 나누기 예제
아래는 한번에 여러개의 구분자를 인자로 전달하여 문자열을 나누는 예제입니다.
반드시 한개만 사용할 필요는 없으며 일상에서 많이 사용하는 토큰 값인 ",", ";" 등을 사용할 수 있습니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "history,human12;fatal";
const char delim[] = ",;";
char* token = strtok(str, delim);
while (token != NULL) {
printf("Token: %s\n", token);
token = strtok(NULL, delim);
}
return 0;
}
5. 안전하게 strtok를 사용하는 방법
strtok 함수는 원본 문자열을 수정하며, 여러 스레드에서 사용 시 문제를 일으킬 수 있습니다.
또한, 중첩 호출로 인해 예기치 않은 결과가 발생할 수 있습니다.
따라서 strtok 함수를 안전하게 사용하기 위해 문자열을 복사하고 다음 토큰을 얻을 때는 strtok_r 함수를 사용하는 것이 좋습니다. 아래는 안전한 사용 방법의 예제입니다.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana;orange";
char copy[100]; // 복사할 버퍼
strcpy(copy, str); // 문자열 복사
const char delim[] = ",;";
char* saveptr;
char* token = strtok_r(copy, delim, &saveptr);
while (token != NULL) {
printf("Token: %s\n", token);
token = strtok_r(NULL, delim, &saveptr);
}
return 0;
}
위의 항목들을 통해 C언어에서 strtok 함수를 활용하여 문자열을 효과적으로 토큰 단위로 나누는 방법과 안전한 사용 방법을 익힐 수 있습니다.
strtok 함수는 문자열 파싱에 유용한 함수이지만, 주의하여 사용해야 합니다.