输出端C - fgets出现分割故障



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

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

但是当我以-

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

效果很好。此外,如果我对str使用malloc,则第一个代码运行。我不明白这是如何发生的。

你的问题在这里:

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

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

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

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

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

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

它可能会崩溃,它可能会起作用,它可能会导致飞猪或鼻妖,或者你所在的时空区域崩溃成一个奇点。总之,不要这样做:-)

相关内容

  • 没有找到相关文章

最新更新