Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengalihkan stdout/stderr ke String dalam C ?

Bagaimana untuk Mengalihkan stdout/stderr ke String dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 03:43:02420semak imbas

How to Redirect stdout/stderr to a String in C  ?

Mengubah hala stdout/stderr ke String dalam C

Walaupun terdapat banyak perbincangan tentang mengalihkan stdout/stderr ke fail, ia juga mungkin untuk mengubah hala output ini kepada rentetan. Artikel ini meneroka cara untuk mencapai ini dengan bantuan std::stringstream dan kelas pengawal.

Jawapan:

Untuk mengubah hala stdout/stderr ke rentetan, anda boleh menggunakan std::stringstream. Begini caranya:

<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 now contains "Bla\n"</code>

Kaedah ini menangkap output konsol ke dalam rentetan.

Untuk memastikan pembersihan yang betul, anda boleh menggunakan kelas pengawal:

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

Dengan menggunakan pengawal ini, anda boleh yakin bahawa penimbal sentiasa ditetapkan semula, memastikan pengendalian I/O konsol yang betul.

Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan stdout/stderr ke String 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