gpt4 book ai didi

c - 从函数返回局部变量在两种情况下给出不同的输出。

转载 作者:行者123 更新时间:2023-12-02 08:42:46 25 4
gpt4 key购买 nike

#include <stdio.h>
char* fun1()
{
char *s="hello";
return s;
}
char* fun2()
{
char s[6]="hello";
return s;
}
main()
{
char *str;
str = fun1();
printf("%s",str);//hello
str = fun2();
printf("%s",str);//garbage value
}

代码的输出是 - 你好和一些垃圾。我不明白虽然 fun1 和 fun2 中的两个变量都是它们各自函数的本地变量,但为什么输出是这样的。两个函数调用都返回局部变量的地址,返回的地址应该包含垃圾值,这在 fun1 的情况下是不正确的它正在打印“你好”。

最佳答案

因为在第二种情况下,对象位于 fun2 的堆栈中,而在第一种情况下,它位于某个固定区域。一旦 fun2 的调用结束,它就会超出范围,即结束。

Both function calls are returning address of local variables

fun1 堆栈上的实际内容只是一个指针,而不是内容本身。因此,您要返回一个指针,指向保证在程序结束前一直存在的东西 - 一个字符串文字。

关于c - 从函数返回局部变量在两种情况下给出不同的输出。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15110961/

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