gpt4 book ai didi

c - fputs 中的 fgets 给出段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:38 25 4
gpt4 key购买 nike

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

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

但是当我运行它时 -

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

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

最佳答案

你的问题出在这里:

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

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

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

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

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

一旦您进入未定义行为的阴暗世界,所有的赌注都会落空。

它可能会崩溃,它可能会工作,它可能会导致飞 pig 或鼻魔或您本地的时空区域坍缩成奇点。底线是,不要这样做 :-)

关于c - fputs 中的 fgets 给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24338509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com