Heim >Backend-Entwicklung >C++ >Wie leite ich stdout/stderr in einen String in C um?

Wie leite ich stdout/stderr in einen String in C um?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 03:43:02525Durchsuche

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

Umleiten von stdout/stderr zu einem String in C

Obwohl es zahlreiche Diskussionen über das Umleiten von stdout/stderr zu Dateien gibt, ist es auch möglich um diese Ausgaben in einen String umzuleiten. In diesem Artikel wird erläutert, wie Sie dies mit Hilfe von std::stringstream und einer Guard-Klasse erreichen.

Antwort:

Um stdout/stderr auf einen String umzuleiten, müssen Sie kann std::stringstream verwenden. So funktioniert es:

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

Diese Methode erfasst die Konsolenausgabe in einem String.

Um eine ordnungsgemäße Bereinigung sicherzustellen, können Sie eine Schutzklasse verwenden:

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

Durch die Verwendung dieses Schutzes können Sie sicher sein, dass der Puffer immer zurückgesetzt wird, um eine ordnungsgemäße Konsolen-E/A-Verarbeitung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie leite ich stdout/stderr in einen String in C um?. 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