将std::vector<char>转换为std::string

5

我正在尝试使用以下方法将std::vector<char>转换为字符串:

//  Data has been received, update the buffer...
buffer = readBuffer.data();
buffer[bytesRead-1] = '\0';

我遇到的问题是,当我调试readBuffer时,得到的结果是""<A HREF="https://www.google.com/">here</A>."
但是在reviewing buffer时,得到的结果是'<A HREF="https://ww ²²²²▌▌╫$Ö►¬∟☺.google.com/">here</A>.'
我是否漏掉了什么非常明显的东西?

向量被定义为std::vector<char> readBuffer(size); 那么readBuffer.data()不会返回字符数组吗? - Swatcat
它返回指向vector的第一个元素的指针(假设size!= 0)。您可能没有显示出现错误的代码行。"reviewing"是什么意思?我假设您访问了buffer,但是何时访问的?当您查看buffer时,readBuffer是否仍然存在? - Steve Jessop
@SteveJessop 我猜测OP的 buffer 指针的生命周期长于 readBuffer 向量,这会导致它指向已释放的数据。在检查 buffer 的内容时会导致垃圾出现。 - user4815162342
1个回答

19

在字符向量的末尾写入空字符并不能神奇地创建一个std::string。要创建一个真正的std::string,可以使用以下方法:

std::string s = std::string(readBuffer.begin(), readBuffer.end());

你不需要显式地将空字符附加到字符串中,std::string的构造函数会为您执行此操作。


谢谢,问题已解决。非常感谢您的快速回答,我之前并没有意识到可以像您那样调用构造函数。 - Swatcat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接