std::streambuf::in_aval对于std::ostream总是返回0

std::streambuf::in_aval always returns 0 for std::ostream

本文关键字:std 返回 ostream aval streambuf in 对于      更新时间:2023-10-16

我的目标是获取存储在streambuf中的数据。我的想法是用rdbuf得到streambuf,然后用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,但从in_avail方法返回了0。

为了访问存储在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;