fputs中的fgets给出了分段错误

时间:2014-06-21 05:11:17

标签: c segmentation-fault malloc fgets fputs

我尝试了以下代码并得到了分段错误 -

    int size=30;
    char *str;
    fputs(fgets(str,size,STDIN),STDOUT);

但当我以 -

运行时
    buff=fgets(str,size,STDIN);
    fputs(buff,STDOUT);

它运作得很好。此外,如果我使用malloc for str,第一个代码就会运行。我无法理解这是怎么回事。

1 个答案:

答案 0 :(得分:5)

你的问题在于:

char *str;
// de-referenece str in ANY way.

你有一个指针可以指向任何地方。这是访问任意内存的未定义行为。

它在一个案例中工作但在另一个案例中工作的事实纯属巧合,你应该提供一个适当的缓冲区,如:

char str[100]; // or whatever size you need.

或使用malloc动态分配内存,正如您已经发现的那样。

一旦你进入了未定义行为的阴暗世界,所有的赌注都将被取消。

它可能会崩溃,它可能会起作用,它可能导致飞猪或鼻子恶魔或当地时空区域的崩溃变成奇点。最重要的是,不要这样做: - )