从函数返回局部变量

时间:2015-05-29 07:25:51

标签: c function return local-variables

在下面的代码中,我返回一个指向函数内部本地创建的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);
  }

输出是 enter image description here

main()函数访问用于创建本地函数char数组的相同内存位置是巧合还是更具体?

1 个答案:

答案 0 :(得分:2)

一旦您使用 get()的返回值,就会看到undefined behaviour

之后,没有任何保证。

换句话说,printf("%1000s\n",y); ## 语句的输出不能对齐。未定义。

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

## - 或,printf("%10s\n",y);printf("%100s\n",y);,无论在何处y 访问。功能