C从函数返回字符数组

时间:2014-03-08 12:24:10

标签: c arrays char return

我已经搜索并找到了几十种从函数返回字符数组的解决方案,但它们都不起作用。我确信这必须在C中可行。 基本上,这就是我想要做的。

char* Add( )
{
    char *returnValue = (char *) malloc( sizeof(char) * 3 );
    returnValue = "test"; //This doesn't work. I'm not at all interrested in doing returnValue[0] = 't', returnValue[1] = 'e', etc.
    return returnValue;
}

我希望你能理解我想在这里做什么。

2 个答案:

答案 0 :(得分:3)

赋值returnValue = "test"使returnValue变量指向内存中的不同空间。它不会影响您刚刚由malloc分配的空间;此外,由于此空间不再被引用,它将保持已分配但未使用,直到您的程序退出。

您需要将字符串复制到刚刚分配的空间中。标准库中有一个函数:strcpy(在<string.h>中声明)。请注意,strcpy不会检查目标缓冲区是否足够大,您需要在调用它之前确保它。

要返回的字符串长度为4个字节,加上空终止符为5.因此,您需要分配(至少)5个字节,而不是3个字节。

char* Add()
{
    char *returnValue = malloc(sizeof(char) * 5);
    strcpy(returnValue, "test");
    return returnValue;
}

答案 1 :(得分:1)

如果您不打算在程序中更改char指针所指向的returnValue,则可以将其简化为:

char* Add( )
{
    return "test";
}

此函数创建分配内存块,使用以下内容填充:

't' 'e' 's' 't' '\0'

然后从第一个元素't'返回地址。根据答案there,为字符串文字分配的内存将保留到程序结束。