Обработка буфера std::stringstream

Я помещаю некоторые данные в поток buf, полученный из stringstream

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, но, похоже, он не работает должным образом. Любые идеи, что может быть правильным способом сделать это?


person Arun    schedule 12.08.2014    source источник


Ответы (2)


Просто используйте data.seekp(pos);, затем data.write() - вам вообще не нужно возиться с буфером.

person Tony Delroy    schedule 12.08.2014

Это может помочь вам начать работу, оно записывает некоторое количество 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;
}
person perreal    schedule 12.08.2014