<分区>
下面的程序可能会打印一些垃圾数据,因为字符串存储在函数 getString() 的堆栈帧中,并且在 getString() 返回后数据可能不存在。
#include <stdio.h>
char *getString()
{
char str[] = "abc";
return str;
}
int main()
{
printf("%s", getString());
return 0;
}
输出:垃圾值。
那么为什么下面的程序运行良好并且没有打印垃圾值。
#include<stdio.h>
int *fun()
{
int i=50;
int *p=&i;
return p;
}
int main()
{
int *q=fun();
printf("%d",*q);
return 0;
}
输出:50
这里 p 也是函数 fun() 中的指针,存储在堆栈段中。 我在这里很困惑。为什么输出是 50 而不是垃圾值?
谢谢。