我想在需要时将cout重定向到文件。这是测试程序的主要部分,但是我无法弄清楚某些输入没有定向到文件。
ucla();
ucla() {
std::cout << "inside ucla" << std::endl;
}
int main() {
const char* outName = argv[2];
std::string outFile(outName);
std::streambuf *coutbuf, *termbuf;
termbuf = std::cout.rdbuf();
if (!outFile.empty()) {
std::ofstream outstr;
outstr.open(argv[2]);
coutbuf = outstr.rdbuf();
std::cout.rdbuf(coutbuf);
std::cout << "here" << std::endl;
} else {std::cout.rdbuf(termbuf);}
std::cout << "this file " << std::endl;
ucla();
}
运行程序时,我希望仅在此处写入文件 这个文件 内部ucla 我搜索了较早的线程,但无法弄清缺少的线程。谢谢
答案 0 :(得分:0)
您的程序有未定义的行为。
当coutbuf
被破坏时, outstr
被破坏。由于rdbuf
块结束时您没有重置cout
的{{1}},因此if
指向cout
外面的一个悬空的rdbuf
-阻止。
建议清理。始终为函数提供返回类型。代替
if
使用
ucla();
要解决该问题,最好将所有“应用程序代码”移至另一个函数,然后从void ucla();
调用该函数。将main
处理代码保留在rdbuf
中。
main