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, ","));