ç分段错误与fgets(c segmentation fault fgets)

2019-08-16 18:13发布

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到(标准输入)流,和我提到这一点,因为我认为该文件*是问题,但现在我不认为它是。 我做了分隔符在我的数据文件“”和“”。

如果有人知道是我做错了什么,我将不胜感激。

Answer 1:

您对通话fscanf注定要失败,因为你没有提供的输出参数。 它应该是这样的:

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

您对通话strtok也无效。 要继续tokenising相同的字符串, 第一个参数strtok应该是NULL ; strtok预计,第二个参数仍然是一个有效的字符串。

每一个问题会导致对自己的段错误。 为了缓解未来的调试,我建议要么使用调试器和设置要调试的语句后一个断点,或者评论了其他线路,您可能希望段错误(这通常包括任何不带串什么,如果你的代码处于脆弱状态。

此外,作为一个风格问题,

*(ary + counter)

通常是写

ary[counter]


Answer 2:

试着用您铸造的malloc调用(字符*)

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



文章来源: c segmentation fault fgets