2012-11-27 48 views
0

我不知道爲什麼下面的代碼段錯誤:çstrtok的段錯誤

char * buffer = "SIZE"; 
char * tempString; 
tempString = strtok(buffer, " "); 
if(strcmp(tempString, "SIZE") == 0){  
    tempString = strtok(NULL, " ");   <----Faulting here 
} 

由於沒有什麼留給tokenate不應tempString只是等於空?感謝您提前提供任何幫助。

回答

2

你就過去的符號化元素the reference says,你有一個乾淨的方法,如果你遵循它。

正確的代碼:

char buffer[] = "SIZE"; 
char * tok; 
tok = strtok(buffer, " "); 
while(tok != NULL) 
{ 
    if(strcmp(tok, "SIZE") != 0)  
    break; 
    tok = strtok(NULL, " ");  // <----Faulted here 
} 

是的,它可以跳過多個「SIZE」詞語的緩衝,所以它比你原來做多一點,但它更容易閱讀的其他程序員(並且稍後更容易記住它,對你也是如此)。

+1

將char * buffer =「SIZE」更改爲'char buffer [] =「SIZE」;'。將字符串文字傳遞給'strtok'是錯誤的。 –

+0

葉普,馬虎,糾正,thx! –

+0

這個解決方案似乎在我的情況下效果最好,謝謝。 –

7

有兩個問題:

首先,strtok需要的第一個參數修改字符串和buffer在你的例子是沒有的。試試這個:

char buffer[] = "SIZE"; 

其次,strcmp不處理NULLstrtok回覆:

if (NULL != tempString && strcmp(tempString, "SIZE") == 0) 
+0

只要按照您所建議的更改運行OP程序,並且仍出現分段錯誤。 –

+0

@HernanVelasquez那麼你的C庫必須是越野車。 'strtok(buffer,「」)'必須返回'&buffer [0]',下面的'strtok(NULL;「」)'必須返回NULL。 –

+0

@DanielFischer這是可能的。我只是再次運行OP的程序,包括string.h,並且完美地工作,即使使用char * buffer =「SIZE」;宣言。 –