【问题标题】:How to correct work with char array in cpp如何在 cpp 中更正使用 char 数组
【发布时间】:2021-12-07 22:49:12
【问题描述】:

我有一些需要 char*** 作为输入参数的 api 函数。 所以,char*** 是 char* 数组的数组。

如何正确设置此字符***?

vector<string> theAttributeValues;
...
char*** listOfListOfValues;
char** listOfValues;
char* stringValue;
for (int i=0; i<theAttributeValues.size(); i++)
{
  stringValue = theAttributeValues[i].c_str();
  listOfValues = (const char**)stringValue;
  listOfListOfValues = new const char**(listOfValues);
}

以及如何读取这个 char*** 的任何 char* ?

for (int i=0; i<listOfListOfValues.size(); i++)
{
  char* strValue = listOfListOfValues[i][0];
  cout<<to_string(i)<<" value:"<<strValue<<endl;
}

【问题讨论】:

  • char *** 看起来像一个二维字符串数组,但 vector&lt;string&gt; 是一维的。
  • @HolyBlackCat 是的,函数 writen 来设置字符串列表,但在我的情况下它只设置一个字符串,所以 2D 总是等于 1。在第二个代码示例中,我只读 [0 ] 元素。
  • 好的,下一个问题:接收数组的函数是否也取大小?
  • @HolyBlackCat 是的,函数还获取 ListOfListOfValues 的大小并以自己的方式使用它。这些功能没有问题。问题是设置这个 char*** 来传入这个函数。 char*** 必须是这样的: ListOfListOfValues[0][0] ListOfListOfValues[1][0] ListOfListOfValues[2][0] etc...第二维只能是[0],没关系。
  • 您是否真的定义了名称混乱的sizeOf 函数,或者您是否拼写错误并误用了sizeof

标签: c++ arrays char


【解决方案1】:

如果我理解正确,你想要这个。

#include <cstddef>
#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> values = {"a", "b", "c"};

    std::vector<char **> x;
    std::vector<char *> y;

    x.reserve(values.size());
    y.reserve(values.size());

    for (std::string &str : values)
        x.push_back(&y.emplace_back(str.data()));
    
    char ***array = x.data();

    for (std::size_t i = 0; i < values.size(); i++)
        std::cout << array[i][0] << '\n';
}

我假设只有arr[i][j](字符串)需要以空值结尾,而不是arr[i]arr(指针数组)。

【讨论】:

  • 谢谢!这部分对我很有帮助!
猜你喜欢
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
相关资源
最近更新 更多