對於我生命中的大部分時間,我一直在使用cstdio
。現在我試圖轉移到iostream
。運行.exe並重定向標準輸入和輸出
假設我有一個名爲「Foo.cpp中」一個獨立的程序,看起來像這樣:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
在所謂的「bar.cpp」另一個程序,我叫foo的可執行文件。在過去,如果我想stdin和stdout重定向到一個文件,我會用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
到stringstreams。事情是這樣的:
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++語言沒有重定向輸出的功能。 –
用於在程序之間共享數據的常見解決方案:文件,套接字,管道(告訴OS將其他程序的管道輸出轉換爲程序的標準輸入),共享內存區域。在網上找。 –
你是否試過只做同樣的freopen調用? – stark