我是C的初学者,我自己学习。
我正在创建以下功能:

char *foo(int x){
     if(x < 0){
        char a[1000];
        char b = "blah";
        x = x - 1;
        char *c = foo(x);
        strcpy(a, b);
        strcat(a, c);
        return a;
      }
    blah ...
}

我基本上是想返回一个附加的字符串,但是出现以下错误:

“错误:函数返回局部变量的地址”,有什么建议,如何解决?

最佳答案

局部变量的生存期仅在定义它的块内部延伸。控件移出定义了局部变量的块后,就不再分配该变量的存储空间(不保证)。因此,在变量的生存期之外使用变量的内存地址将是不确定的行为。

另一方面,您可以执行以下操作。

 char *str_to_ret = malloc (sizeof (char) * required_size);
  .
  .
  .
 return str_to_ret;

并改用str_to_ret。并且当return成为str_to_ret时,将返回malloc分配的地址。 malloc分配的内存是从堆中分配的,堆的生存期跨程序的整个执行过程。因此,您可以在程序运行期间的任何时间和任何位置访问内存位置。

还要注意,这是一个好习惯,当您完成分配的内存块后,对其进行free编码以防止内存泄漏。释放内存后,您将无法再次访问该块。

10-08 11:16