首頁 > 後端開發 > C++ > 主體

如何在 C 中將 Stdout/Stderr 輸出捕獲為字串?

DDD
發布: 2024-11-03 04:44:30
原創
909 人瀏覽過

How to Capture Stdout/Stderr Output as a String in C  ?

將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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板