Остринстрим ломает кут?

Я хочу вывести содержимое 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

3

Решение

Ваша проблема в том, что rdbuf() буфер для ostringstream как и следовало ожидать от названия, только писать ( ostringstream возвращает строку через str() метод). Вы не можете прочитать данные обратно через указатель буфера.

Измени свой ostringstream в stringstream и это должно работать нормально.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]