如何将 cout 存储在字符串中,然后将字符串输出到控制台?

How to store cout in string and then output the string to console?

提问人:ten1o 提问时间:10/31/2022 最后编辑:ten1o 更新时间:10/31/2022 访问量:367

问:

我正在尝试将程序的输出存储在一个文件中,即使我知道有各种更简单的方法,我也想使用字符串解决问题,因为我想知道它背后的逻辑。

到目前为止,我了解实现:

std:: stringstream s;
s << "string";

我知道在某个时候我会有以下代码

cout << s.str()

但是如何在不提供字符串本身的情况下将程序输出存储在字符串流中呢?换句话说,如何将程序中的 cout 语句重定向到字符串?

C++ 字符串 文件-IO IOstream

评论

0赞 Pete Becker 10/31/2022
你所要求的是你的代码片段的作用。显示您遇到问题的实际代码。
0赞 Mark Ransom 10/31/2022
如果你在问如何更改,以便在不更改代码的情况下将输出转到你的字符串,你不能。cout
0赞 Thomas Weller 10/31/2022
你为什么要这样做?您可以像使用 cout 一样使用。这太好了,不是吗?s <<
0赞 Remy Lebeau 10/31/2022
@MarkRansom是的,你可以。看看我刚刚发布的答案。
0赞 Thomas Weller 10/31/2022
@RemyLebeau:如何“不更改代码”?

答:

4赞 Remy Lebeau 10/31/2022 #1

如果您的目标是重定向到 ,则可以使用 cout.rdbuf() 方法提供要写入的不同缓冲区,例如 a 的缓冲区(或 a 等)。std::coutstd::stringstd::coutstd::ostringstreamstd::ofstream

上面链接的文档提供了以下示例:

#include <iostream>
#include <sstream>

int main() {
    std::ostringstream local;
    auto cout_buff = std::cout.rdbuf(); // save pointer to std::cout buffer

    std::cout.rdbuf(local.rdbuf()); // substitute internal std::cout buffer with
        // buffer of 'local' object

    // now std::cout work with 'local' buffer
    // you don't see this message
    std::cout << "some message";

    // go back to old buffer
    std::cout.rdbuf(cout_buff);

    // you will see this message
    std::cout << "back to default buffer\n";

    // print 'local' content
    std::cout << "local content: " << local.str() << "\n";
}

评论

0赞 Mark Ransom 10/31/2022
每天都能学到新东西。我不知道C++标准委员会已经预料到了这种需求。