我有以下代码可以正常工作。
const char** array = new const char*[_list.size()];
unsigned index = 0;
for (std::list<std::string>::const_iterator it = _list.begin(); it != _list.end(); ++it) {
array[index] = it->c_str();
index++;
}
我的问题是,如何将const char **转换为const char *。请帮忙。
答案 0 :(得分:-1)
这实际上是一个XY问题。 Hameed应该告诉他解决了什么问题,而不是他要完成什么步骤来解决问题。实际上这个任务是什么?将字符串列表转换为c字符串数组? 如果是,那么应该以这种方式做一些事情(遗憾的是,应该复制数据)
char** arr = new char*[_list.size()];
int i = 0;
for(auto it = _list.begin(); it != _list.end(); ++it, +i)
{
const char *s = it->c_str(); // should not be modified or deleted
const size_t l = strlen(s);
arr[i] = new char [l+1];
std::copy(&s[0],&s[l], &(arr[i][0]));
}
...
你需要从列表中获取第i个元素吗?
auto it = _list.begin();
std::advance(it, i);
const char *a = it->c_str();
如果在每个元素的循环中执行该操作,只需将其递增即可。
将所有字符串连接在一起?迭代列表,计算总长度,然后分配该长度的char数组并逐个复制字符串。我有模糊的记忆,提升得到了这个算法::加入已经,但是stl需要长而褶边的代码,不能在手机上设计,任何可以编辑答案的人都欢迎。以不同的形式提出了十几个解决方案的问题:How to implode a vector of strings into a string (the elegant way)