【问题标题】:Converting vector<char> to const char* and string将 vector<char> 转换为 const char* 和字符串
【发布时间】:2016-04-19 12:32:41
【问题描述】:

如何将向量转换为 const char* ?还要串? 这合法吗?

void Printer::Wrap(const CharVector& text, RangeVector& result) const
    //if (TestLineWidth(text.begin(), text.end()))
    int c = 0;
    for (CharVector::const_iterator it = text.begin(); it != text.end(); ++it)
        c++;
    if (TestLineWidth(&text[0], &text[c]))

这里是 CharVector 和 TestLineWidth 的声明:

typedef std::vector<char> CharVector;

bool TestLineWidth(const char* from, const char* to) const;

【问题讨论】:

  • 在c++11中有一个方法std::vector::data。对于旧版本,您可以使用&amp;text[0]。但请记住,c-string 是一个以 null 结尾的字符串,并且向量末尾可能没有 null
  • 为什么会涉及到vector?为什么不使用 std::string?它就是为此而生的!
  • @Klaus 可能存在一个字节数组,它可能不仅包含字符串,也可能不像 HTTP 客户端的某些实现那样仅包含单个字符串。

标签: c++ string iterator char stdvector


【解决方案1】:
#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    vector<char> data = {'h', 'e', 'l', 'l', 'o', '!'};
    cout << string(begin(data), end(data)) << endl;
    return 0;
}

对于 const char *,你不能只调用 data.data(),因为 C 字符串是空终止的,所以你必须在末尾附加 '\0'

【讨论】:

  • 我不确定我是否理解:我拥有的是 vector 数据,而我需要的是 const char* 我不能像注释行中那样做,data.begin() , data.end()
  • 如果需要 const char *,使用 string(begin(data), end(data)).c_str()
  • 谢谢。我怎么知道 const char* 的开始和结束?您能看到我在原始问题中发布的代码的功能吗?
【解决方案2】:

如果您想将字符串转换为 char*,您可以使用 yourString.c_str() cf C++ 文档:http://www.cplusplus.com/reference/string/string/c_str/

【讨论】:

  • 我正在尝试将 vector 转换为 const char*
  • 我的意思是你必须先从你的 vector 创建一个字符串(使用 Patryk 解决方案),然后从这个字符串创建一个 char*。
  • 好的,但是这个函数我需要知道char*的开头和结尾(注释函数TestLineWidth)
  • 事实上,如果你至少使用 C++11,你可以使用非成员 begin() 和 end() codeproject.com/Articles/570638/…
  • 对不起,我还是不明白。我可以从向量创建字符串,我可以将该字符串转换为 const char*,但看看我的函数 - 我需要 vector.begin() 和 vector.end(),它们必须转换为 const char*
猜你喜欢
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多