Maison  >  Article  >  développement back-end  >  Comment capturer la sortie standard et les flux d’erreurs dans une chaîne en C ?

Comment capturer la sortie standard et les flux d’erreurs dans une chaîne en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 01:24:30234parcourir

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

Comment rediriger la sortie vers une chaîne en C

Pour divers scénarios de débogage et de test, il peut être pratique de rediriger la sortie standard et l'erreur est transmise à une chaîne plutôt qu'à la console.

Solution : Utilisation de std::stringstream

Pour rediriger stdout/stderr vers une chaîne, vous pouvez utiliser le std ::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>

Classe de garde pour la réinitialisation du tampon

Pour garantir que le tampon est réinitialisé après la redirection, vous pouvez créer 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>

Cette classe de garde garantit que le tampon est toujours restauré à son état d'origine, même en cas d'exceptions.

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