以下C程序的输出是什么?

13 浏览
0 Comments

以下C程序的输出是什么?

这个问题已经有答案了:

局部变量的内存能否在其范围之外被访问?

char *getString()
{
    char str[] = "Will I be printed?";    
    return str;
}
int main()
{
    printf("%s", getString());
    getchar();
}

输出不应该是“我会被打印吗?”吗? 相反,输出结果是一些垃圾值。为什么会这样?

admin 更改状态以发布 2023年5月21日
0
0 Comments

由于您在离开getString函数时,本地变量str的范围将被解除。

0
0 Comments

char str[] = "Will I be printed?";   

是本地声明。它在函数 getString() 中被限制。当您离开函数时,str [] 将被折叠。

所以你正在尝试打印它的数据。显然,你会得到垃圾值!

为了避免这种情况 -

char *str = "Will I be printed?";

现在,str 将存储在代码内存中,当您离开函数时,str 不会被折叠。现在它将打印 Will I be printed?

0