最近我遇到了一个小问题,困扰了我很长一段时间,但却发现了一些解释。虽然它仍然有点令人困惑。
char *getString()
{
char *str = "Print Me!";
return str;
}
int main()
{
printf("%s", getString());
getchar();
return 0;
}
输出为:
Print Me!
虽然
char *getString()
{
char str[] = "Print Me!";
return str;
}
int main()
{
printf("%s", getString());
getchar();
}
给出垃圾值。为什么会这样。
答案 0 :(得分:2)
下面:
char *getString()
{
char str[] = "Print Me!";
return str;
}
您正在返回具有自动存储持续时间的对象。对象的生命周期是声明它的块。因此,在函数返回后,您的对象将被销毁并尝试访问,从而调用未定义的行为。
但是在这里:
char *getString()
{
char *str = "Print Me!";
return str;
}
str
指针指向字符串文字,字符串文字具有静态存储持续时间。具有静态存储持续时间的对象的生命周期是程序的整个生命周期。然后完美地定义函数返回后访问字符串文字。