2012-04-13 89 views
1

我已經看過其他問題等,我已經看到你不能在strtok中有第一個參數不能被編輯,但我不認爲我有這個代碼,但仍然獲得seg故障? 我使用strtok錯了嗎?strtok()seg fault

此代碼是以csv逗號分隔格式獲取stdin,並添加stdin中的數字,然後將它們打印到stdout,p.s.例如,當令牌不是指針時,我使用它。 i+= token;但我得到隨機輸出,正如我所料想的那樣。

#include <stdio.h> 
#include <string.h> 
int main(){ 
char *token, input[256]; 
int i = 0; 

scanf("%s" , input); 
token = strtok (input, ","); 

while(token != NULL){ 
    token = strtok(NULL, ","); 
    i += *token; 

     }     

printf("%d\n", i); 
return 0; 
    } 

由於拉克蘭

回答

7

在某些時候strtok將返回NULL,你不會檢查:

token = strtok(NULL, ","); 
i += *token; /* Will dereference NULL. */ 

相反,你應該做的:

while(token != NULL){ 
    i += *token; /* We know `token` isn't NULL. */ 
    token = strtok(NULL, ","); 
} 

作爲一個邊注意你在做什麼 - 添加字符值 - 沒有什麼意義。你會想以某種方式轉換它們,可能使用strto(u)l

+0

Doh!非常抱歉。 – UNECS 2012-04-13 08:22:30

+0

請原諒我的無知,我沒有在我的研究中發現它'strtol(token)'將標記更改爲'NULL'? – UNECS 2012-04-13 09:01:26

+0

@LachlanMcGivern'strtol'不會改變它的第一個參數。 – cnicutar 2012-04-13 09:05:24

0

在做i+=*token之前,您需要先將字符串轉換爲整數,然後查看將字符串轉換爲整數的函數,如strtol

相關問題