Maison > développement back-end > C++ > Pouvez-vous rediriger la sortie standard (stdout) et l'erreur standard (stderr) vers une chaîne en C ?

Pouvez-vous rediriger la sortie standard (stdout) et l'erreur standard (stderr) vers une chaîne en C ?

Barbara Streisand
Libérer: 2024-11-02 22:14:30
original
591 Les gens l'ont consulté

Can You Redirect Standard Output (stdout) and Standard Error (stderr) to a String in C  ?

Redirection de stdout/stderr vers une chaîne

De nombreuses discussions ont porté sur la redirection de stdout/stderr vers un fichier. Cependant, est-il possible de rediriger cette sortie vers une chaîne ?

Solution

Oui, la redirection vers un objet std::stringstream est réalisable :

<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>
Copier après la connexion

Pour assurer la réinitialisation automatique du buffer, pensez à utiliser une classe de garde :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal