Mengubah hala Stdout/Stderr ke String
Walaupun mengubah hala stdout/stderr ke fail adalah amalan biasa, terdapat senario di mana menangkap output sebagai rentetan adalah lebih sesuai. Dalam artikel ini, kami akan meneroka cara untuk mencapai ini menggunakan perpustakaan C standard.
Menggunakan Stringstream
Satu pendekatan ialah memanfaatkan kelas std::stringstream. Dengan mengalihkan stdout/stderr ke objek rentetan, anda boleh menangkap output sebagai rentetan. Berikut ialah contoh:
<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>
Kod ini mula-mula mencipta aliran rentetan dan menetapkan penimbalnya kepada cout. Sebarang keluaran seterusnya kepada cout akan ditangkap oleh aliran rentetan. Selepas ubah hala selesai, anda boleh mengakses teks yang ditangkap menggunakan kaedah str() aliran rentetan.
Menggunakan Kelas Pengawal
Untuk memastikan penimbal adalah sentiasa menetapkan semula dengan betul, anda boleh membuat kelas pengawal. Berikut ialah contoh:
<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>
Kelas cout_redirect membenarkan anda mengubah hala stdout/stderr buat sementara waktu dalam skopnya. Apabila objek kelas ini dicipta, penimbal lama disimpan. Selepas pemusnahannya, penimbal lama dipulihkan.
Dengan menggunakan teknik ini, anda boleh menangkap output stdout/stderr dengan mudah sebagai rentetan, memberikan fleksibiliti dalam mengurus output dalam aplikasi C anda.
Atas ialah kandungan terperinci Bagaimana untuk Menangkap Output Stdout/Stderr sebagai Rentetan dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!