我正在编写单元测试,因此无法更改我正在测试的文件中的代码。我正在测试的代码在 cout 中有消息,我试图将其重定向到文件中以检查以确保程序输出正确的消息。有谁有办法在另一个程序中重定向标准输出而不会导致延迟?我尝试过 freopen() ,这导致我的程序由于某种原因挂起。
你可以创建一个filebuf
然后替换cout
带有它的streambuf:
{
std::filebuf f;
f.open("output.txt", std::ios::out);
std::streambuf* o = std::cout.rdbuf(&f);
std::cout << "hello" << std::endl; // endl will flush the stream
std::cout.rdbuf(o);
}
你需要恢复cout
再次原始的streambuf(或将其设置为空指针),否则当全局流被刷新和销毁时它可能会崩溃,因为filebuf
已经超出了范围。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)