在下面的代码中,我返回一个指向函数内部本地创建的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数组的相同内存位置是巧合还是更具体?
答案 0 :(得分:2)
一旦您使用 get()
的返回值,就会看到undefined behaviour。
之后,没有任何保证。
换句话说,printf("%1000s\n",y);
## 语句的输出不能对齐。 是,是。未定义。
FWIW,一旦get()
函数执行完毕,为该函数分配的堆栈空间已销毁并可供任何使用(,如果需要)其他功能。也许你正在未经授权的进入进入物理内存的那一部分,但事实并非如此。
## - 或,printf("%10s\n",y);
或printf("%100s\n",y);
,无论在何处y
访问。功能