gpt4 book ai didi

c++ - std::cout 的重定向范围

转载 作者:太空狗 更新时间:2023-10-29 20:09:28 26 4
gpt4 key购买 nike

大家好你们这些杰出的程序员。我一直在尝试将 std::cout 重定向到一个文件,例如在执行代码时

std::cout << "hello" << std::endl;

“hello”这个词将被写入我重定向到的文件。

我有以下程序:

// Redirection.cpp
#include <iostream>
#include <fstream>

int main(int argc, char **argv) {
if(argc == 2){
std::cout << "Output file supplied, redirecting to output.txt" << std::endl;
std::ofstream out("C:\\Avner\\HUJI\\CPP\\ex2\\output.txt");
std::cout.rdbuf(out.rdbuf());
std::cout << "This file contains output of Redirection.cpp" << std::endl;
}
std::cout << "This should be displayed in console or in the output file, if supplied" << std::endl;
return 0;
}

我期待 output.txt 阅读:

This file contains output of Redirection.cpp
This should be displayed in console or in the output file, if supplied

但它只显示:

This file contains output of Redirection.cpp

我认为我使用的重定向仅适用于该范围,而不适用于任何外部范围。

我该如何解决这个问题?我需要的行为是,只有在提供输出文件时,所有打印才会写入该文件而不是控制台。

非常感谢大家的免费帮助、爱护和支持!

最佳答案

#include <iostream>
#include <fstream>

int main(int argc, char **argv) {
if(argc == 2){
std::cout << "Output file supplied, redirecting to output.txt" << std::endl;
std::ofstream out("C:\\Avner\\HUJI\\CPP\\ex2\\output.txt");
std::cout.rdbuf(out.rdbuf());
std::cout << "This file contains output of Redirection.cpp" << std::endl;
}
std::cout << "This should be displayed in console or in the output file, if supplied" << std::endl;
return 0;
}

回想一下,out 是一个automatic storage-duration 的对象。因此,在您最后一次 std::cout 操作之前的“}”处,out 被销毁(结果被释放,缓冲区和文件资源)。

因此,要确保流缓冲区仍然有效,请保持 out alive。参见 Barmar's answer一种方法。

关于c++ - std::cout 的重定向范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46061713/

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