구문 분석하려는 전역 문자열을 사용합니다. 구문 분석은 여러 기능에서 수행됩니다. 예를 들어, func1()에서 첫 번째 토큰을 추출한 다음 func2() 등에서 동일한 전역 문자열의 두 번째 토큰을 추출합니다.
가능합니까? 그 첫 번째 후 토큰의 추출은 strtok (NULL, 구분 기호)에 의해 수행되고 strtok는 null로 대체 된 구분 기호에 다음 바이트에 대한 포인터를 저장하지만 strtok이 문자열을 저장하는 방법에 대한 설명을 찾을 수 없습니다. 그것은 다른 기능을 수행 할 때 구분됩니다.여러 함수의 전역 문자열에 대한 C strtok
1
A
답변
1
가능. strtok은 문자열을 정적 메모리에 저장합니다.
예.
#include <stdio.h>
#include <string.h>
char sentence[] = "The quick brown fox jumps over the lazy dog";
char* sentencep = sentence;
char* func1(void){
char* p = sentencep;
if(sentencep != NULL)
sentencep = NULL;
return strtok(p, " ");
}
char* func2(void){
char* p = sentencep;
if(sentencep != NULL)
sentencep = NULL;
return strtok(p, " ");
}
int main(){
puts(func1());//The
puts(func2());//quick
puts(func2());//brown
puts(func1());//fox
return 0;
}
+0
참조 http://research.microsoft.com/en-us/um/redmond/projects/invisible/src/crt/strtok.c.htm – BLUEPIXY
"글로벌 문자열"이라고 했으므로, 'strtok'을 사용하고있는 문자열이 문자열 리터럴이 아닌지 확인하십시오. –