我如何使用写与stringstream

How do I use write with stringstream?

本文关键字:stringstream 何使用      更新时间:2023-10-16

我有一个vector<char>的数据,我想写入std::stringstream

我试着:

my_ss.write(vector.data(), vector.size());

…但它似乎没有放入my_ss,我声明如下:

std::stringstream my_ss( std::stringstream::binary);

为什么写不工作(应用程序不崩溃和编译0错误,0警告)?

对于"我该怎么做"你可以使用std::ostream_iterator:

std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));

完整的示例:

#include <iterator>
#include <sstream>
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
  std::vector<char> vector(60, 'a');
  std::ostringstream my_ss;
  std::copy(vector.begin(), vector.end(), std::ostream_iterator<char>(my_ss));
  std::cout << my_ss.str() << std::endl;
}

你也可以直接用它来构造一个string,而不需要经过stringstream:

std::string str(vector.begin(), vector.end()); // skip all of the copy and stringstream

虽然您没有给出任何代码,但听起来您可能刚刚写了:

std::stringstream my_ss (std::stringstream::binary);

如果您希望写入stringstream,则需要在构造函数中组合std::stringstream::out标志。如果我是对的,那么你会看到,如果你把它改为:

std::stringstream my_ss (std::stringstream::out | std::stringstream::binary);

(显然,如果你想从stringstream中读取,你需要添加std::stringstream::in)

UPDATE现在你已经给出了你的代码…是的,这是你的具体问题。请注意@awoodland的观点,即您可以直接从字符向量构造字符串(如果这是您计划对该流做的唯一事情)

stringstream中stringbuf模式的默认参数为out|in。

explicit basic_stringstream(ios_base::openmode _Mode =
    ios_base::in | ios_base::out)
    : _Mybase(&_Stringbuffer),
        _Stringbuffer(_Mode)
    {   // construct empty character buffer
    }

如果您显式传递stringstream:binary

,则需要添加stringstream::out

或者直接使用std::ostringstream