c分段故障fgets

int main( int argc, char** argv) { FILE *inFilePtr = fopen(*(argv + 1), "r"); char *rawdata = malloc(sizeof(char) * 100); float *ary = malloc(sizeof(float) * 50); int counter = 0; float averageAns; int count = 0; while (count < 1 ){ //fgets(rawdata, 50, inFilePtr); //I have tried both fscanf(inFilePtr, "%s", rawdata); *(ary + counter) = atof(strtok(rawdata, ",")); counter++; *(ary + counter ) = atof(strtok(rawdata, NULL)); counter++; *(ary + counter) = atof(strtok(rawdata, NULL)); counter++; count++; } 

我不能为我的生活弄清楚为什么我一直有一个段错误。 即使没有循环,它也会出现故障(计数<1只是为了看看我是否可以通过一次)。

它不适用于fgets(),fscanf()。 当我将fgets中的流更改为(stdin)时,它会出现故障,我提到这是因为我认为文件*是问题,但现在我认为不是。 我在我的数据文件“”和“,”中制作了分隔符。

如果有人知道我做错了什么,我会很感激。

您对fscanf调用肯定会失败,因为您没有提供输出参数。 它应该看起来像:

 fscanf(inFilePtr, "%s", rawdata); 

您对strtok调用也无效。 要继续标记相同的字符串, strtok第一个参数应为NULL ; strtok期望第二个参数仍然是一个有效的字符串。

这些问题中的每一个都会导致自身的段错误。 为了便于将来调试,我建议使用调试器并在调试语句后设置断点,或者注释掉你可能期望segfault的其他行(通常包括任何对字符串做任何事情的行,如果你的代码处于脆弱状态。

另外,作为一种风格,

 *(ary + counter) 

通常是写的

 ary[counter] 

尝试使用(char *)转换malloc调用

也许,只是也许: ary[counter++] = atof(strtok(rawdata, ","));