Heim >Backend-Entwicklung >C++ >Wie erfasst man Standardausgabe- und Fehlerströme in einem String in C?

Wie erfasst man Standardausgabe- und Fehlerströme in einem String in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 01:24:30305Durchsuche

How to Capture Standard Output and Error Streams in a String in C  ?

So leiten Sie die Ausgabe in einen String in C um

Für verschiedene Debugging- und Testszenarien kann es praktisch sein, die Standardausgabe umzuleiten Fehlerströme werden an einen String und nicht an die Konsole gesendet.

Lösung: Verwenden von std::stringstream

Um stdout/stderr auf einen String umzuleiten, können Sie std verwenden ::stringstream class:

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

Guard Class for Buffer Reset

Um sicherzustellen, dass der Puffer nach der Umleitung zurückgesetzt wird, können Sie eine Guard-Klasse erstellen:

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

Diese Schutzklasse garantiert, dass der Puffer auch im Ausnahmefall immer in seinen ursprünglichen Zustand zurückversetzt wird.

Das obige ist der detaillierte Inhalt vonWie erfasst man Standardausgabe- und Fehlerströme in einem String in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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