error:函数返回局部变量的地址

我是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 ...

}

我基本上试图返回一个附加的字符串,但我收到以下错误:


“错误:函数返回局部变量的地址”,任何建议,如何解决这个问题?


江户川乱折腾
浏览 690回答 3
3回答

千万里不及你

局部变量的生命周期仅在定义它的块内部延伸。当控件超出定义局部变量的块之外时,不再分配(不保证)变量的存储。因此,使用变量的生命周期区域外的变量的内存地址将是未定义的行为。另一方面,您可以执行以下操作。&nbsp;char *str_to_ret = malloc (sizeof (char) * required_size);&nbsp; .&nbsp; .&nbsp; .&nbsp;return str_to_ret;并使用str_to_ret相反。当returning时str_to_ret,malloc将返回分配的地址。分配的内存malloc是从堆中分配的,其堆的生命周期跨越程序的整个执行。因此,您可以在程序运行时随时随地访问内存位置。另请注意,在完成分配的内存块之后,这是一个很好的做法,free它可以避免内存泄漏。释放内存后,无法再次访问该块。
打开App,查看更多内容
随时随地看视频慕课网APP