如何将list <string>转换为char **?</string>

时间:2012-03-12 06:35:48

标签: c++ string list pointers stl

  

可能重复:
  Converting a std::list to char*[size]

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

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

1 个答案:

答案 0 :(得分:1)

不幸的是,列表中的元素在内存中不是连续的,因此没有直接的方法将列表转换为数组。那么你的方法应该做的是分配一个新数组,然后复制字符串。如果您只想要一个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;
}

希望这个答案有所帮助。