Я хочу вывести содержимое ostringstream
в другой поток (например, std::cout
). Я знаю, что я могу использовать std::ostringstream::str()
но я предполагаю, что это приводит к дополнительным расходам на копирование содержимого потока в строку и затем в другой поток. Я обнаружил, что могу использовать std::ostringstream::rdbuf()
(Комментарий предполагает 25 голосов). Но это ломается std::cout
как показано в результатах тестовой программы ниже. Я делаю что-то неправильно?
#include <iostream>
#include <sstream>
int main(int argc, char const *argv[])
{
std::ostringstream ss;
ss << "some data" << std::endl;
std::cerr << std::cout << std::endl;
std::cout << "start" << std::endl;
std::cout << ss.str();
std::cout << ss.rdbuf();
std::cout << "end" << std::endl;
std::cerr << std::cout << std::endl;
return 0;
}
Результаты в:
0x6013b8
start
some data
0
Ваша проблема в том, что rdbuf()
буфер для ostringstream
как и следовало ожидать от названия, только писать ( ostringstream
возвращает строку через str()
метод). Вы не можете прочитать данные обратно через указатель буфера.
Измени свой ostringstream
в stringstream
и это должно работать нормально.
Других решений пока нет …