从函数返回局部变量

在下面的代码中,我返回一个指向函数内部本地创建的char数组的指针。 因此,当返回值分配给y ,它应该都是垃圾。 当我打印%10s%100s时,这似乎也适用。 但是当我打印%1000s ,我得到的输出似乎让我感到困惑。

 #include  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数组的相同内存位置是巧合还是更具体?

看看,一旦你使用 get()的返回值,你就会面临未定义的行为 。

在那之后,没有任何保证。

换句话说, printf("%1000s\n",y);的输出printf("%1000s\n",y); ##语句无法certificate 。 它 ,它什么。 未定义。

FWIW,一旦get()函数执行了finsihed,为该函数分配的堆栈空间将被销毁并可供任何其他函数使用( 如果需要 )。 也许你正在未经授权进入 物理内存的那一部分,但事实并非如此。


## – 或, printf("%10s\n",y); printf("%100s\n",y); 无论如何,无论在何处访问 y