0

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

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

但是当我运行它时 -

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

它工作得很好。此外,如果我对 str 使用 malloc,则运行第一个代码。我不明白这是怎么回事。

4

1 回答 1

5

你的问题出在这里:

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

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

它在一种情况下有效但在另一种情况下无效的事实纯属巧合,您应该提供适当的缓冲区,例如:

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

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

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

它可能会崩溃,它可能会起作用,它可能会导致飞猪或鼻恶魔或你当地的时空区域崩溃成一个奇点。底线,不要这样做:-)

于 2014-06-21T05:20:31.120 回答