
strtok 함수는 원래 문자열을 변경하는 이유는, 함수 내부에서 문자열을 분리하는 과정에서 원래 문자열을 변경하는 동적 메모리 할당을 사용하기 때문입니다.
strtok 함수는 첫 번째 호출에서 원래 문자열을 분리하고, 그 결과를 저장하는 포인터를 반환합니다. 이후 호출에서는 이전 호출에서 분리된 문자열을 기반으로 새로운 분리를 수행합니다.
따라서, 이전 호출에서 분리된 문자열이 다음 호출에 영향을 미치는 이유는, strtok 함수가 이전 호출에서 분리된 문자열의 시작 위치를 기억하고, 다음 호출에서 그 시작 위치를 기반으로 새로운 분리를 수행하기 때문입니다.
이러한 동작 방식을 이해하면, strtok 함수의 문제를 해결하기 위한 대안을 찾을 수 있습니다. 예를 들어, strtok_r 함수를 사용하여 원래 문자열을 변경하지 않고, 분리된 문자열을 반환할 수 있습니다.
strtok_r 함수는 strtok 함수와 유사하게 동작하지만, 원래 문자열을 변경하지 않고, 분리된 문자열을 반환합니다.
strtok_r 함수를 사용하여 문제를 해결한 코드는 다음과 같습니다.
c
#include
#include
int main() {
char str[] = "Hello, World!, World!";
char *token;
char *saveptr;
token = strtok_r(str, ",", &saveptr);
printf("%sn", token); // Hello
token = strtok_r(str, ",", &saveptr);
printf("%sn", token); // World!
token = strtok_r(str, ",", &saveptr);
printf("%sn", token); // World!
return 0;
}
strtok_r 함수를 사용하면, 원래 문자열을 변경하지 않고, 분리된 문자열을 반환할 수 있습니다.
2025-07-19 12:44