Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah anda mengalihkan stdout dan stderr ke rentetan dalam C ?

Bolehkah anda mengalihkan stdout dan stderr ke rentetan dalam C ?

Susan Sarandon
Susan Sarandonasal
2024-11-02 22:27:30535semak imbas

Can you redirect stdout and stderr to a string in C  ?

Mengubah hala stdout/stderr ke String

Mengubah hala stdout dan stderr ke fail adalah tugas biasa, tetapi boleh output kepada rentetan dicapai ?

Jawapan:

Ya, adalah mungkin untuk mengubah hala stdout dan stderr ke std::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>

Untuk memastikan penimbal sentiasa ditetapkan semula, kelas pengawal boleh digunakan:

<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>

Atas ialah kandungan terperinci Bolehkah anda mengalihkan stdout dan stderr ke rentetan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn