将cout重定向到文件

时间:2019-02-15 05:04:28

标签: c++ cout

我想在需要时将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 我搜索了较早的线程,但无法弄清缺少的线程。谢谢

1 个答案:

答案 0 :(得分:0)

您的程序有未定义的行为。

coutbuf被破坏时,

outstr被破坏。由于rdbuf块结束时您没有重置cout的{​​{1}},因此if指向cout外面的一个悬空的rdbuf -阻止。


建议清理。始终为函数提供返回类型。代替

if

使用

ucla();

更新,以回应OP的评论

要解决该问题,最好将所有“应用程序代码”移至另一个函数,然后从void ucla(); 调用该函数。将main处理代码保留在rdbuf中。

main