Maison > développement back-end > C++ > le corps du texte

Comment capturer la sortie Stdout/Stderr sous forme de chaîne en C ?

DDD
Libérer: 2024-11-03 04:44:30
original
909 Les gens l'ont consulté

How to Capture Stdout/Stderr Output as a String in C  ?

Redirection de Stdout/Stderr vers une chaîne

Bien que la redirection de Stdout/Stderr vers un fichier soit une pratique courante, il existe des scénarios dans lesquels la capture du la sortie sous forme de chaîne est plus appropriée. Dans cet article, nous explorerons comment y parvenir à l'aide des bibliothèques C standard.

Utilisation de Stringstream

Une approche consiste à exploiter la classe std::stringstream. En redirigeant stdout/stderr vers un objet stringstream, vous pouvez capturer la sortie sous forme de chaîne. Voici un exemple :

<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

Ce code crée d'abord un stringstream et attribue son tampon à cout. Toute sortie ultérieure vers cout sera capturée par le stringstream. Une fois la redirection terminée, vous pouvez accéder au texte capturé à l'aide de la méthode str() du stringstream.

Utilisation d'une classe de garde

Pour vous assurer que le tampon est toujours correctement réinitialisé, vous pouvez créer une classe de garde. Voici un exemple :

<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

La classe cout_redirect vous permet de rediriger temporairement stdout/stderr dans sa portée. Lorsqu'un objet de cette classe est créé, l'ancien tampon est stocké. Lors de sa destruction, l'ancien tampon est restauré.

En utilisant ces techniques, vous pouvez facilement capturer la sortie de stdout/stderr sous forme de chaîne, offrant ainsi une flexibilité dans la gestion de la sortie dans vos applications C.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal