c分段故障fgets

时间:2013-02-05 05:00:45

标签: c segmentation-fault 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++;
        }

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

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

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

2 个答案:

答案 0 :(得分:2)

您对fscanf的呼叫保证会失败,因为您没有提供输出参数。它应该看起来像:

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

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

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

另外,作为一种风格,

*(ary + counter)

通常是写的

ary[counter]

答案 1 :(得分:0)

尝试使用(char *)

转换malloc调用

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