知道为什么这段代码不起作用?
#include <stdio.h>
char* get_name()
{
char string[4];
string[0] = 'A';
string[1] = 'N';
string[2] = 'A';
string[3] = '\0';
return string;
}
int main()
{
char *name = get_name();
printf("%s \n", name);
return 0;
}
谢谢。
答案 0 :(得分:6)
您的代码失败,因为您返回的指针指向一个立即超出范围的变量。您正在返回指向局部变量的指针。局部变量的范围在函数返回时结束。因此,在范围结束后尝试引用它们是错误的。
您需要使用malloc
来分配字符串。这样你就可以分配一个对象,它的生命周期在函数结束时存活。
char* get_name()
{
char *string = malloc(4);
strcpy(string, "ANA");
return string;
}
请注意,您需要通过调用malloc
来匹配对free
的每次通话。
char *name = get_name();
printf("%s \n", name);
free(name);
我在这里也省略了错误检查以简化操作。
答案 1 :(得分:1)
string
是一个局部变量。当您从get_name
返回时,此变量不再存在。