【问题标题】:Returning a char** dynamic array C++返回一个 char** 动态数组 C++
【发布时间】:2015-01-11 14:28:54
【问题描述】:

我基本上有一个动态 char 数组来存储名称并将其声明为char **names

我有一个名为namesnumber 的变量,用于设置names 数组的大小。

例如,

namesnumbers = 5
names = new char*[namesnumbers];
for (int i=0; i<namesnumbers; i++)
{
   names[i] = new char[65];
   strcpy(names[i], actualName);
}
names = {Mike, Sam, Mark, Bill, George}

这是我的返回方法,但它只返回内存地址而不是实际名称

const char** getNames()
{
   return names;
}

我希望我的 getNames() 方法返回 5 个名称。

【问题讨论】:

  • 使用 std::string 和 std::vector 或 std::array。
  • 为什么在 C++ 程序中使用 C 风格的字符串和内存分配?使用 std::string 和 std::vector 并为自己省去很多麻烦。
  • 你有存储名字的地方的地址,你必须取消引用它才能得到名字
  • 如果你是 C++ 新手,我建议你查看The Definitive C++ Book Guide and List,以及a good reference site
  • Sorry, I am new to C++ and I am willing to learn 正如其他人所指出的,这是了解std::vectorstd::string 的绝佳时机。请为您自己的理智使用它们。

标签: c++ arrays char return


【解决方案1】:
// namesnumbers = 5
names = new char*[namesnumbers];
for (int i=0; i<namesnumbers; i++)
{
   names[i] = new char[65];
   strcpy(names[i], actualName);
}
// names = {Mike, Sam, Mark, Bill, George}

使用标准库进行等效初始化:

  • 与实例化分开:

    std::vector<std::string> names;
    for(const auto& n: actualNames) // actualNames assumed to be an array
        names.push_back(n);
    
  • 在实例化时:

    std::vector<std::string> names = { "Mike", "Sam", "Mark", "Bill", "George" };
    
  • 返回五个名称:

    const std::vector<std::string>& getNames()
    {
        return names;
    }
    

【讨论】:

  • 谢谢,不使用矢量怎么办?只是取消引用数组?
  • @RewsProg 您不能取消引用数组。数组不是指针。指针不是数组。
  • 您在答案开头引用的代码 sn-p 中看到了什么?无论您尝试构建的范围如何,我都看到了一个甚至无法编译的混乱。因此,您的 使用 进行等效初始化一定是错误的。 (抱歉:-1)
  • @Wolf,很明显,问题的重点不是namesnumbers = 5 最后是否缺少分号并且未声明。我没有为此烦恼。
  • @utnapistim 当然,但你为什么引用这个废话作为参考?
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2021-12-05
相关资源
最近更新 更多