Heim > Backend-Entwicklung > C++ > Hauptteil

Wie erfasst man die Stdout/Stderr-Ausgabe als String in C?

DDD
Freigeben: 2024-11-03 04:44:30
Original
908 Leute haben es durchsucht

How to Capture Stdout/Stderr Output as a 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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage