2011-12-26 1 views
1

구문 분석하려는 전역 문자열을 사용합니다. 구문 분석은 여러 기능에서 수행됩니다. 예를 들어, func1()에서 첫 번째 토큰을 추출한 다음 func2() 등에서 동일한 전역 문자열의 두 번째 토큰을 추출합니다.
가능합니까? 그 첫 번째 후 토큰의 추출은 strtok (NULL, 구분 기호)에 의해 수행되고 strtok는 null로 대체 된 구분 기호에 다음 바이트에 대한 포인터를 저장하지만 strtok이 문자열을 저장하는 방법에 대한 설명을 찾을 수 없습니다. 그것은 다른 기능을 수행 할 때 구분됩니다.여러 함수의 전역 문자열에 대한 C strtok

+1

"글로벌 문자열"이라고 했으므로, 'strtok'을 사용하고있는 문자열이 문자열 리터럴이 아닌지 확인하십시오. –

답변

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