gpt4 book ai didi

c - 无法预测以下程序的输出

转载 作者:行者123 更新时间:2023-11-30 18:55:14 26 4
gpt4 key购买 nike

我有一个关于悬空指针的想法。我知道下面的程序会产生一个悬空指针。但我无法理解程序的输出

char *getString()
{
char str[] = "Stack Overflow ";
return str;
}
int main()
{
char *s=getString();
printf("%c\n",s[1]);
printf("%s",s); // Statement -1
printf("%s\n",s); // Statement -2
return 0;
}

以下程序的输出是t如果只有 Statement-1 存在,则输出是一些抓取值如果只有 Statement-2 存在则输出为新行

最佳答案

您的代码显示undefined behaviour ,因为您返回的是局部变量的地址。

一旦getString()函数完成执行并返回,str就不存在了。

对于这个问题,

if only Statement-1 is there then output is some grabage values if only Statement-2 is there then output is new line

没有解释。一旦您的程序表现出未定义的行为,就无法预测输出,仅此而已。 [谁知道呢,它可能也会打印你的手机号码,或者一个守护进程可能会从我的 Nose 里飞出来]

对于简单的逻辑部分,在printf()中添加\n将导致输出缓冲区立即刷新到输出。 [提示:stdout 是行缓冲的。]

解决方案:

您可以通过以下两种方式之一完成工作

  • 获取一个指针,在getString()内动态分配内存并返回指针。 (我推荐这个)。另外,完成后,稍后在 main()free()它。
  • char str[] 设置为 static,以便作用域不限于函数的生命周期。 (不太好,但仍然可以完成工作)

关于c - 无法预测以下程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298609/

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