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

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

Mary-Kate Olsen
リリース: 2024-11-03 03:43:02
オリジナル
492 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート