1

我已经看过其他问题等,我已经看到你在 strtok 中不能有第一个无法编辑的 arg,但我认为我在这段代码中没有,但仍然出现 seg 错误?我使用 strtok 错了吗?

此代码以 csv 逗号分隔格式获取标准输入,并将标准输入中的数字添加到标准输出中,ps 我让它在令牌不是指针时工作,例如。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;
    }

谢谢拉克兰

4

2 回答 2

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.

于 2012-04-13T08:19:48.693 回答
0

您需要先将字符串转换为整数,然后i+=*token再看一下函数,例如 strtol将字符串转换为整数。

于 2012-04-13T08:21:26.160 回答