이 샘플 프로그램에서는 문자열을 두 개의 토큰으로 분할하기 위해 strtok_r
을 사용합니다.strtok_r의 내부 포인터를 사용하는 것이 안전합니까?
#include <stdio.h>
#include <string.h>
int main(void) {
char buf[] = "Hello World!";
char tok[] = " ";
char *p;
char *retStr = strtok_r(buf, tok, &p);
printf("\"%s\" \"%s\"\n", retStr, p);
return 0;
}
이 프로그램의 출력 포인터 p
재진입 목적 strtok_r
내부적으로 사용되는 man page 따르면
"Hello" "World!"
이다. 내가 여기에있는 것처럼 그것은 문자열의 나머지 부분을 가리키는 것으로 가정하는 것이 안전할까요?
명시 적으로 지정되어 있지 않으므로 이에 의존하지 않습니다. 구현으로 일부 특수 내부 구조를 가리킬 수 있습니다 (매우 드물지 만 정리가 어렵습니다). – Dave
좀 더 현실적인 모호성은 최신 토큰을 가리키는 지 아니면 최신 토큰 이후의 공간인지 또는 그 변형을 나타내는 것입니다. – Dave