我已经看过其他问题了,我已经看到你不能在strtok中有一个无法编辑的第一个arg但是我不认为我在这段代码中但是仍然遇到一个段错误? ? 我使用strtok错了吗?
此代码以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;
}
谢谢Lachlan
答案 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
。
答案 1 :(得分:0)
在执行i+=*token
之前,您需要将字符串转换为整数,请查看将字符串转换为整数的strtol
等函数。