2011-12-26 64 views
1

我使用了一個我想分析的全局字符串。分析是從多個功能完成的。 例如,我從func1()中提取第一個標記,然後從func2()中的相同全局字符串中提取第二個標記等等。
這可能嗎?我知道在第一個標記之後的提取是通過strtok(NULL,delimiter)完成的,strtok保存指向分隔符的下一個字節的指針替換爲null,但是我找不到描述strtok如何保存字符串它會在不同的功能中完成分隔。C strtok來自多個函數的全局字符串

+1

因爲您說過「全局字符串」,請確保您使用'strtok'的字符串不是字符串文字。 – 2011-12-26 22:35:25

回答

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 2011-12-27 13:21:48