將Stdout/Stderr 重定向到字串
雖然將stdout/stderr 重定向到檔案是一種常見的做法,但在某些情況下捕獲作為字串輸出更合適。在本文中,我們將探討如何使用標準 C 函式庫來實現此目的。
使用 Stringstream
一個方法是利用 std::stringstream 類別。透過將 stdout/stderr 重定向到 stringstream 對象,您可以將輸出捕獲為字串。下面是一個範例:
<code class="cpp">std::stringstream buffer; std::streambuf *old = std::cout.rdbuf(buffer.rdbuf()); std::cout << "Bla" << std::endl; std::string text = buffer.str(); // text will now contain "Bla\n"</code>
此程式碼首先建立一個字串流並將其緩衝區分配給 cout。 cout 的任何後續輸出都將被 stringstream 捕獲。重定向完成後,您可以使用 stringstream 的 str() 方法存取捕獲的文字。
使用 Guard 類別
以確保緩衝區始終正確重置,您可以建立一個守衛類別。以下是一個範例:
<code class="cpp">struct cout_redirect { cout_redirect( std::streambuf *new_buffer ) : old( std::cout.rdbuf( new_buffer ) ) { } ~cout_redirect( ) { std::cout.rdbuf( old ); } private: std::streambuf *old; };</code>
cout_redirect 類別可讓您在其範圍內暫時重新導向 stdout/stderr。當建立此類的物件時,舊的緩衝區將被儲存。一旦它被破壞,舊的緩衝區就會被恢復。
透過利用這些技術,您可以輕鬆地將 stdout/stderr 的輸出捕獲為字串,從而在 C 應用程式中管理輸出方面提供靈活性。
以上是如何在 C 中將 Stdout/Stderr 輸出捕獲為字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!