ostringstream打破了cout?

时间:2013-05-21 19:01:38

标签: c++ ostringstream

我想将ostringstream的内容输出到其他一些流(例如std::cout)。我知道我可以使用std::ostringstream::str(),但我认为将流内容复制到字符串然后再转到另一个流时会有开销。我发现我可以使用std::ostringstream::rdbuf()Comment suggesting that has 25 votes)。但它会中断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

1 个答案:

答案 0 :(得分:2)

您的问题是rdbuf()的{​​{1}}缓冲区正如您所期望的那样,只写ostringstream返回字符串通过ostringstream方法)。您无法通过缓冲区指针读取数据。

将您的str()更改为ostringstream,它应该可以正常使用。