如何将字符串列表转换为char **? 有没有办法使用可用的STL成员方法。如果没有,我该如何实现呢?
我正在调用一个C函数,它将输入作为char **,来自C ++,其中包含要发送的字符串列表。
答案 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;
}
希望这个答案有所帮助。