std::streambuf::in_aval всегда возвращает 0 для std::ostream

Моя цель - сохранить данные в streambuf, Моя идея становится streambuf от rdbuf а затем получать данные с помощью sgetn,

class mystreambuf : public std::streambuf {}

mystreambuf strbuf;
std::ostream os(&strbuf);
os << "1234567890";
std::streambuf *sb = os.rdbuf();
std::streamsize size = sb->in_avail();

Я ожидал получить 10, но я вернул 0 из in_avail метод.

1 ответ

Чтобы получить доступ к данным, хранящимся в std:: streambuf, вы можете связать std::ostream с std::stringbuf и получить его содержимое, используя std::stringbuf::str()

std::stringbuf strbuf;
std::ostream os(&strbuf);  
os << "1234567890";

std::string content(strbuf.str());
std::cout << "size: " << content.size() << std::endl;
std::cout << "content: " << content << std::endl;

Это даст:

размер: 10
содержание: 0123456789

Более короткий путь - использовать std::stringstream.

std::ostringstream os;  
os << "1234567890";

std::string content(os.str());
std::cout << "size: " << content.size() << std::endl;
std::cout << "content: " << content << std::endl;
Другие вопросы по тегам