Pra*_*van 5 c++ io stringstream
我有这样的代码
int main()
{
std::stringstream oss;
std::cerr.rdbuf( oss.rdbuf() );
std::cerr << "this goes to cerr";
std::cout << "[" << oss.str() << "]";
}
Run Code Online (Sandbox Code Playgroud)
但我得到的程序输出为
[this goes to cerr]Segmentation fault
Run Code Online (Sandbox Code Playgroud)
该程序如何进行分段?
Bjö*_*lex 12
这是因为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);
}
Run Code Online (Sandbox Code Playgroud)
请参阅我的这个答案以获得异常安全的解决方案.
归档时间: |
|
查看次数: |
7250 次 |
最近记录: |