C strtok()分段故障
我已经看了其他问题等,我看到你不能在strtok中有一个不能编辑的第一个arg,但我认为我在这段代码中没有,但仍然得到一个seg错误?? 我用错strtok了吗 这段代码是以csv逗号分隔格式获取stdin,并从stdin中添加数字,然后将它们打印到stdout,p.s.当令牌不是指针时,我让它工作,例如C strtok()分段故障,c,segmentation-fault,strtok,C,Segmentation Fault,Strtok,我已经看了其他问题等,我看到你不能在strtok中有一个不能编辑的第一个arg,但我认为我在这段代码中没有,但仍然得到一个seg错误?? 我用错strtok了吗 这段代码是以csv逗号分隔格式获取stdin,并从stdin中添加数字,然后将它们打印到stdout,p.s.当令牌不是指针时,我让它工作,例如i+=token但我得到的是随机输出,正如我所想的那样 #include <stdio.h> #include <string.h> int main(){ char *
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;
}
#包括
#包括
int main(){
字符*标记,输入[256];
int i=0;
扫描频率(“%s”,输入);
令牌=strtok(输入“,”);
while(令牌!=NULL){
令牌=strtok(空,“”,“”);
i+=*令牌;
}
printf(“%d\n”,i);
返回0;
}
感谢Lachlan在某个时刻,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
将返回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
在执行i+=*token
之前,您需要将字符串转换为整数,请查看将字符串转换为整数的函数,例如strtol
。在执行i+=*token
之前,您需要将字符串转换为整数,看看将字符串转换为整数的函数,例如strtol
。Doh!抱歉,请原谅我的无知,我在研究中没有发现它。是否将令牌更改为空?LachlanMcGivernstrtol
不会更改它的第一个参数。但是我的scanf“%s”,input
不会工作,因为它会在字符串的末尾添加空值??scanf man所说的与NULL
?Doh!抱歉,请原谅我的无知,我在研究中没有发现它。是否将令牌更改为空?LachlanMcGivernstrtol
不会更改它的第一个参数。但是我的scanf“%s”,input
不会工作,因为它会在字符串的末尾添加空值??scanf man所说的与NULL
相同吗?