【发布时间】:2017-04-19 15:57:50
【问题描述】:
在我的大部分时间里,我一直在使用cstdio。现在我正在尝试切换到iostream。
假设我有一个名为“foo.cpp”的单独程序,如下所示:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
在另一个名为“bar.cpp”的程序中,我调用了 foo 可执行文件。过去,如果我想将标准输入和标准输出重定向到一个文件,我会像这样使用freopen:
int main(){ // bar.cpp, redirecting stdin and stdout
freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
freopen("foo.out", "w", stdout);
system("foo.exe"); // "foo.out" will contain "47"
}
现在我正在尝试将std::cin 和std::cout 重定向到字符串流。像这样的:
int main(){ // bar.cpp, redirecting cin and cout
std::istringstream instr("62");
std::ostringstream outstr;
std::cin.rdbuf(instr.rdbuf());
std::cout.rdbuf(outstr.rdbuf());
system("foo.exe"); // outstr should contain "67"
}
但我了解到的是 std::cin 和 std::cout 在执行“foo.exe”时没有被重定向。该程序现在需要用户输入并将打印到std::cout。执行完“foo.exe”后,“bar.cpp”中的std::cin 和std::cout 仍然分别重定向到instr 和outstr。
我的问题是,有没有办法像我想要的那样使用iostream,还是我坚持使用freopen?
【问题讨论】:
-
操作系统负责处理可执行文件的输出。 C++ 语言没有重定向输出的功能。
-
程序之间共享数据的常用解决方案:文件、套接字、管道(告诉操作系统将其他程序的输出通过管道传输到您程序的标准输入)、共享内存区域。搜索互联网。
-
您是否尝试过只进行相同的 freopen 调用?