在C中返回char *

时间:2013-02-22 17:05:39

标签: c

知道为什么这段代码不起作用?

#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;
}

谢谢。

2 个答案:

答案 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返回时,此变量不再存在。