function返回c中局部变量的地址

时间:2014-03-02 03:00:21

标签: c

我创建了一个向字符串添加字符的函数,我有下一个错误消息函数返回局部变量的地址请帮帮我,我的代码如下。

int main(int argc, char** argv) 
{
    char* string;
    string ="hola mundo";
    char c ='x';

    string = cadena_mas_caracter(string,c);
    printf("texto sumado %s",string);

    return (EXIT_SUCCESS);
}

char *cadena_mas_caracter(char* cadena, char caracter)
{
    int i=0;
    int largo_texto = strlen(cadena)+1;
    char cadena_nueva[largo_texto+1];


    for( i=0; i < largo_texto; i++)
    {
        cadena_nueva[i] = cadena[i];
        if(cadena[i] == '\0')
        {
            cadena_nueva[i]= caracter;
        }
    }

    return cadena_nueva;
}

1 个答案:

答案 0 :(得分:4)

你不应该(虽然是的,有时它可以返回预期的结果!)从函数返回局部变量指针,因为它在堆栈上分配!

以下是关于原因的一个很好的解释:Can a local variable's memory be accessed outside its scope?

要使代码正常工作,请替换

char cadena_nueva[largo_texto+1]; 

char* cadena_nueva = (char*)malloc(sizeof(char)*(largo_texto+1));

完成后使用它时不要忘记free()


如果您阅读有关堆和&amp;堆栈内存存储:

What and where are the stack and heap? http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html http://www-ee.eng.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html