Heim > Artikel > Backend-Entwicklung > Wie erfasst man die Stdout/Stderr-Ausgabe als String in C?
Stdout/Stderr in einen String umleiten
Während das Umleiten von stdout/stderr in eine Datei eine gängige Praxis ist, gibt es Szenarien, in denen das Erfassen des Die Ausgabe als String ist besser geeignet. In diesem Artikel werden wir untersuchen, wie wir dies mithilfe von Standard-C-Bibliotheken erreichen können.
Verwendung von Stringstream
Ein Ansatz besteht darin, die Klasse std::stringstream zu nutzen. Durch die Umleitung von stdout/stderr an ein Stringstream-Objekt können Sie die Ausgabe als String erfassen. Hier ist ein Beispiel:
<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>
Dieser Code erstellt zunächst einen Stringstream und weist seinen Puffer cout zu. Jede nachfolgende Ausgabe an cout wird vom Stringstream erfasst. Nachdem die Umleitung abgeschlossen ist, können Sie mit der str()-Methode des Stringstreams auf den erfassten Text zugreifen.
Verwendung einer Schutzklasse
Um sicherzustellen, dass der Puffer vorhanden ist Um immer ordnungsgemäß zurückgesetzt zu werden, können Sie eine Schutzklasse erstellen. Hier ist ein Beispiel:
<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>
Mit der Klasse cout_redirect können Sie stdout/stderr innerhalb ihres Gültigkeitsbereichs vorübergehend umleiten. Beim Erstellen eines Objekts dieser Klasse wird der alte Puffer gespeichert. Nach seiner Zerstörung wird der alte Puffer wiederhergestellt.
Durch die Verwendung dieser Techniken können Sie die Ausgabe von stdout/stderr einfach als Zeichenfolge erfassen und so die Ausgabe in Ihren C-Anwendungen flexibel verwalten.
Das obige ist der detaillierte Inhalt vonWie erfasst man die Stdout/Stderr-Ausgabe als String in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!