-1

有什么想法为什么这段代码不起作用?

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

谢谢你。

4

2 回答 2

8

您的代码失败,因为您正在返回一个指向立即超出范围的变量的指针。您正在返回一个指向局部变量的指针。局部变量的作用域在函数返回时结束。因此,在范围结束后尝试引用它们是错误的。

您需要使用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);

我在这里也省略了错误检查以简化事情。

于 2013-02-22T17:06:44.807 回答
1

string是一个局部变量。当您从 中返回时get_name,此变量不再存在。

于 2013-02-22T17:07:01.983 回答