我在使用atof和strtok时遇到问题。
#include<stdio.h> // printf
#include<stdlib.h> // atof
#include<string.h> // strtok
int main()
{
char buf[256]="123.0 223.2 2314.2";
char* tp;
printf("buf : %s\n", buf);
tp = strtok(buf," ");
printf("tp : %g ", atof(tp));
while (tp!=NULL) {
tp = strtok(NULL," ");
printf("%g ", atof(tp));
}
return 0;
}
我可以编译上面的代码,它不会返回错误或警告消息。 但是当我执行“a.out”时,它会返回如下所示的分段错误。
78746 Segmentation fault: 11 ./a.out
我不知道是什么问题。正如我所看到的,上面的代码并没有复合语法错误。
答案 0 :(得分:10)
当tp
变为空时,您会对其atof
进行操作!
像这样重写你的循环:
int main()
{
char buf[256]="123.0 223.2 2314.2";
char* tp;
printf("buf : %s\n", buf);
tp = strtok(buf," ");
printf("tp :");
while (tp!=NULL) {
printf("%g ", atof(tp));
tp = strtok(NULL," ");
}
return 0;
}
答案 1 :(得分:3)
您正在将tp传递给atof而不检查它是否为非空。