我已经搜索并找到了几十种从函数返回字符数组的解决方案,但它们都不起作用。我确信这必须在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;
}
我希望你能理解我想在这里做什么。
答案 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,为字符串文字分配的内存将保留到程序结束。