2011-12-26 13 views
1

私は解析したいグローバル文字列を使用します。解析は複数の関数から行われます。 たとえば、func1()で最初のトークンを抽出し、func2()などで同じグローバル文字列から2番目のトークンを抽出します。
これは可能ですか?私は、最初のものが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

関連する問題