【发布时间】:2015-08-11 23:13:44
【问题描述】:
在下面的代码中,我返回一个指向在函数内部本地创建的char 数组的指针。所以当返回值赋值给y时,应该都是垃圾。当我打印%10s 或%100s 时,这似乎成立。但是当我打印%1000s 时,我得到的输出似乎让我感到困惑。
#include <stdio.h>
char* get()
{
char x[1000] ;
int i = 0;
for(; i < 999; ++i)
{
x[i] = 'A';
}
x[999] = '\0';
printf("%1000s\n",x);
return x;
}
int main()
{
char* y = get();
printf("Going to print\n");
printf("%1000s\n",y);
}
输出是
main() 函数正在访问用于创建本地函数 char 数组的同一内存位置是巧合还是更具体?
【问题讨论】:
-
您在调用未定义行为时所做的任何假设都是没有意义的。这就是未定义行为的本质;没有没有定义。所以,你一开始的“应该都是垃圾”的前提本身就是把握了信念的飞跃。见stackoverflow.com/questions/6441218/…
-
为什么不呢,
char x[1000] = {0};然后声明char *get (char *x)最后调用char *y = get (x);
标签: c function return local-variables