ホームページ >バックエンド開発 >C++ >C で stdout/stderr を文字列にリダイレクトするにはどうすればよいですか?

C で stdout/stderr を文字列にリダイレクトするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 03:43:02526ブラウズ

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

stdout/stderr を C の文字列にリダイレクトする

stdout/stderr をファイルにリダイレクトすることについては数多くの議論がありますが、それも可能ですこれらの出力を文字列にリダイレクトします。この記事では、std::stringstream とガード クラスを使用してこれを実現する方法について説明します。

回答:

stdout/stderr を文字列にリダイレクトするには、次のようにします。 std::stringstream を使用できます。その仕組みは次のとおりです。

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

このメソッドは、コンソール出力を文字列にキャプチャします。

適切なクリーンアップを確保するには、ガード クラスを利用できます。

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

このガードを使用すると、バッファが常にリセットされ、適切なコンソール I/O 処理が保証されるので安心できます。

以上がC で stdout/stderr を文字列にリダイレクトするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。