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

时间:2015-11-26 10:24:41

标签: c++ stl streambuf

我的目标是将数据存储在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,但我从in_avail方法返回0。

1 个答案:

答案 0 :(得分:0)

要访问std::streambuf中存储的数据,您可以将std::ostreamstd::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;