std :: stringstream缓冲区操作

时间:2014-08-12 05:45:55

标签: c++ stringstream streambuf

我将一些数据放入从stringstream

获得的流buf中
std::stringstream data;
auto buf = data.rdbuf();
buf->sputn(XXX);

我想要的是能够将一些虚拟数据放入此缓冲区,然后在稍后,一旦我有正确的数据,就替换虚拟数据。

这些方面的东西:

auto count = 0;
buf->sputn((unsigned char *)&count, sizeof(count));
for (/*some condition*/)
{
   // Put more data into buffer

   // Keep incrementing count
}

// Put real count at the correct location

我尝试使用pubseekpos + sputn但它似乎没有按预期工作。任何想法可能是正确的方法吗?

2 个答案:

答案 0 :(得分:3)

只需使用data.seekp(pos);然后使用data.write() - 您根本不需要填充缓冲区。

答案 1 :(得分:0)

这可能有助于您开始使用,它会写入一些X并将其打印回来,这也可以通过data << 'X'完成:

#include <sstream>
#include <iostream>
int main() {
    std::stringstream data;
    auto buf = data.rdbuf();
    char c;
    for (int count = 0; count < 10; count++) {
        buf->sputn("X", 1); 
    }   
    while (data >> c) {
        std::cout << c;
    }   
    return 0;
}