gpt4 book ai didi

c++ - 使用字符串流将 stderr 重定向到 stdout

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:31 29 4
gpt4 key购买 nike

我有这样的代码

int main()
{
std::stringstream oss;
std::cerr.rdbuf( oss.rdbuf() );

std::cerr << "this goes to cerr";
std::cout << "[" << oss.str() << "]";
}

但是我得到程序的输出为

[this goes to cerr]Segmentation fault

程序是如何发生段错误的?

最佳答案

这是因为您在程序退出之前没有恢复cerr 的缓冲区。这样做:

#include <iostream>
#include <sstream>

int main()
{
std::stringstream oss;
std::streambuf* old = std::cerr.rdbuf( oss.rdbuf() );

std::cerr << "this goes to cerr";
std::cout << "[" << oss.str() << "]";
std::cerr.rdbuf(old);
}

参见 this answer of mine对于异常安全的解决方案。

关于c++ - 使用字符串流将 stderr 重定向到 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108336/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com