我创建了一个向字符串添加字符的函数,我有下一个错误消息函数返回局部变量的地址请帮帮我,我的代码如下。
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;
}
答案 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