2011-12-26 68 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