如何将列表转换为<string>字符**?

How can I convert list<string> to char**?

本文关键字:gt 字符 string 转换 lt 列表      更新时间:2023-10-16

可能重复:
将std::list转换为char*[size]

如何将字符串列表、列表转换为char**?是否有任何方法可以使用可用的STL成员方法。如果没有,我该如何实现?

我正在调用一个C函数,它将输入作为char**,来自C++,它有要发送的字符串列表。

不幸的是,列表中的元素在内存中不是连续的,因此没有直接的方法将列表转换为数组。因此,您的方法应该分配一个新数组,然后复制字符串。如果您只想要一个const char数组,并且在使用const char阵列时列表不会更改,那么您可以执行以下操作:

void UseListOfString(const std::list<std::string>& l) {
  const char** array = new const char*[l.size()];
  unsigned index = 0;
  for (std::list<std::string>::const_iterator it = l.begin(); it != l.end(); ++it) {
    array[index]= it->c_str();
    index++;
  }
  // use the array

 delete [] array;
}

如果列表可以更改,或者您需要与const数组不同的东西,则需要复制字符串:

void UseListOfString(const std::list<std::string>& l) {
  unsigned list_size = l.size();
  char** array = new char*[list_size];
  unsigned index = 0;
  for (std::list<std::string>::const_iterator it = l.begin(); it != l.end(); ++it) {
    array[index] = new char[it->size() + 1];
    memcpy(array[index], it->c_str(), it->size());
    array[it->size()] = 0;
  }
  // use the array
  for (unsigned index = 0; index < list_size; ++index) {
    delete [] array[index];
  }
  delete [] array;
}

希望这个答案能有所帮助。