【问题标题】:ostringstream breaks cout?ostringstream 打破常规?
【发布时间】:2013-05-21 19:01:37
【问题描述】:

我想将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

【问题讨论】:

  • 按照您的建议使用str()

标签: c++ ostringstream


【解决方案1】:

您的问题是ostringstreamrdbuf() 缓冲区,正如您可能从名称中所期望的那样,只写ostringstream 通过str() 方法返回字符串)。您无法通过缓冲区指针从中读取数据。

将您的ostringstream 更改为stringstream,它应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 2013-03-27
    相关资源
    最近更新 更多