要从函数返回char *数组,我有以下定义。它没有编译所以我需要专家的建议来修改它。我的最终目标是从函数中获取char *数组。
char * []GetItems()
{
const char *Items[] = {"Item1" , "Item2" , "Item3"};
//processing items..
return Items
}
感谢您的帮助。
答案 0 :(得分:3)
这里有三个问题:
*
而非[]
。const
变量,因此需要将返回类型标记为const
。所以,要编译它:
// Note the return type is const char**
const char** GetItems()
{
// Note this is still a local variable - you'll have to deal with that
static const char *Items[] = {"Item1" , "Item2" , "Item3"};
//processing items..
return Items;
}
答案 1 :(得分:2)
您不能在C ++中将数组作为返回参数 您应该使用char **作为返回参数或使用std :: vector< std :: string> >如果您正在编写C ++代码。
祝你好运!
答案 2 :(得分:1)
这里有三个问题。
C数组降级为指针。你不能这样返回C数组,只能返回char **
。这没有隐含的大小,因此您最后需要一个标记(例如NULL
)。或者在C ++中使用std::vector
。
您不应该从函数返回局部变量的地址,因为一旦函数退出,它的内存地址就会被覆盖。您需要malloc
(或C ++中的new
来分配数组。在下面的示例中,我将其设为全局。
您不能拥有数组的const
声明,但在没有强制转换的情况下将其作为非const返回。假设您正在处理,请删除const
。
尝试类似:
#include <stdio.h>
#include <stdlib.h>
// Use char* casts to enable the 'processing' later, i.e. do not use
// const strings
char *Items[] = { (char*) "Item1", (char*) "Item2", (char*) "Item3", NULL };
char **
GetItems ()
{
//processing items..
return Items;
}
int
main (int argc, char **argv)
{
int i;
char **items = GetItems ();
for (i = 0; items[i]; i++)
{
printf ("Item is %s\n", items[i]);
}
exit (0);
}