【问题标题】:convert const char ** to const char *将 const char ** 转换为 const char *
【发布时间】:2016-12-06 15:37:54
【问题描述】:

我有以下代码可以正常工作。

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 *。请帮忙。

【问题讨论】:

  • 你不能修改const
  • 一些错误现已修复。
  • 等等,你想把一个包含多个字符串的列表转换成一个 C 字符串吗?
  • 您应该花更多时间阅读您的 C++ 书籍,以便了解和了解 const char * 是什么、数组是什么以及 std::string 是什么。如果你不了解基本原理,你就不可能弄清楚如何正确地做你想做的事。
  • 你可以更进一步,最终将其转换为 const char

标签: c++ visual-c++-2012


【解决方案1】:

这实际上是一个 XY 问题。哈米德应该告诉他他解决了什么问题,而不是他要完成什么步骤才能解决问题。实际上任务是什么?将字符串列表转换为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();

如果在循环中为每个元素执行此操作,只需将其递增。

将所有字符串合并为一个?遍历列表,计算总长度,然后分配该长度的字符数组并一一复制字符串。我有模糊的记忆,boost已经把它作为算法::加入,但是stl需要长而褶边的代码,不能在电话上设计,欢迎任何可以编辑答案的人。在堆栈上以不同的形式呈现具有十几个解决方案的问题:How to implode a vector of strings into a string (the elegant way)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多