ホームページ  >  記事  >  バックエンド開発  >  C で文字列内の標準出力とエラー ストリームをキャプチャするにはどうすればよいですか?

C で文字列内の標準出力とエラー ストリームをキャプチャするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 01:24:30234ブラウズ

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

C で出力を文字列にリダイレクトする方法

さまざまなデバッグおよびテストのシナリオでは、標準出力とエラーはコンソールではなく文字列にストリームされます。

解決策: std::stringstream を使用する

stdout/stderr を文字列にリダイレクトするには、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>

バッファ リセットのガード クラス

リダイレクト後にバッファが確実にリセットされるように、ガード クラスを作成できます:

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

このガード クラスは、例外が発生した場合でもバッファが常に元の状態に復元されることを保証します。

以上がC で文字列内の標準出力とエラー ストリームをキャプチャするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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