在C ++中返回char *数组

时间:2014-09-27 10:29:42

标签: c++

要从函数返回char *数组,我有以下定义。它没有编译所以我需要专家的建议来修改它。我的最终目标是从函数中获取char *数组。

char * []GetItems()
{
const char *Items[] = {"Item1" , "Item2" , "Item3"};


//processing items..


return Items
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

这里有三个问题:

  1. 要使用c / c ++返回数组,您只需使用其他*而非[]
  2. 由于您返回const变量,因此需要将返回类型标记为const
  3. 返回本地指针几乎不是一个好主意......
  4. 所以,要编译它:

    // 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)

这里有三个问题。

  1. C数组降级为指针。你不能这样返回C数组,只能返回char **。这没有隐含的大小,因此您最后需要一个标记(例如NULL)。或者在C ++中使用std::vector

  2. 您不应该从函数返回局部变量的地址,因为一旦函数退出,它的内存地址就会被覆盖。您需要malloc(或C ++中的new来分配数组。在下面的示例中,我将其设为全局。

  3. 您不能拥有数组的const声明,但在没有强制转换的情况下将其作为非const返回。假设您正在处理,请删除const

  4. 尝试类似:

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