计划#1:
#include<stdio.h>
#include<stdlib.h>
char *getString()
{
char str[] = "GfG";
printf("%s \n", str);
return str;
}
int main()
{
printf("%s", getString());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
GfG
GfG
Run Code Online (Sandbox Code Playgroud)
计划#2:
#include<stdio.h>
#include<stdlib.h>
char *getString()
{
char str[] = "GfG";
return str;
}
int main()
{
printf("%s", getString());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
(垃圾值)
请解释为什么因为只有一个printf语句输出不同.具体描述是什么?
oua*_*uah 10
因为两个程序都显示未定义的行为.
当getString函数返回时,str数组对象被销毁并在其生命周期后尝试访问它是未定义的行为.
您可以使用字符串文字修复程序,因为字符串文字具有静态存储持续时间,其生命周期是程序的整个持续时间:
char *getString(void)
{
char *str = "GfG";
return str;
}
Run Code Online (Sandbox Code Playgroud)