36

それらの違いは何ですか?また、どのように使用されますか?誰かが私に例を指摘できますか?

具体的には、どちらの場合もストリームにどのように「書き込む」のですか? また、書き込まれたテキストを復元して出力する (つまり、画面に出力する) 方法は?

また、「画面」出力自体がストリームですよね?多分私はストリームを十分に理解していません。もちろん、これはファイルに保存することもできます。これらはすべてfprintf/fscanfなどを使用しますか?

4

2 に答える 2

51

cerrは C++ ストリーム、stderrは C ファイル ハンドルで、どちらも標準エラー出力を表します。

他のストリームやファイル ハンドルに書き込むのと同じ方法でそれらに書き込みます。

cerr << "Urk!\n";
fprintf (stderr, "Urk!\n");

このコンテキストでの「回復」の意味がわかりません。出力は標準エラーに送られ、それだけです。その後、プログラムはそれを気にすることを意図していません。後でプログラムの外から保存する方法を意味する場合は、次の段落を参照してください。

デフォルトでは、それらは端末に送信されますが、次のような方法で出力を別の場所にリダイレクトできます。

run_my_prog 2>error.out

そして、はい、「画面」出力はストリーム(またはファイルハンドル)ですが、それは通常、デフォルトで「画面」に接続されているstdout/coutためです。stderr/cerr画面に何も書き込まれない次の場合のように、リダイレクトはこれに影響します。

run_my_prog >/dev/null 2>&1

/dev/tty(にもかかわらず、直接書き込むなどのトリッキーなこと)。そのスニペットは、標準出力と標準エラーの両方をリダイレクトして、ビット バケットに移動します。

于 2010-07-08T01:37:12.043 に答える
11

それらの違いは何ですか

stderrでありFILE*、標準 C ライブラリの一部です。 cerrでありostream、標準 C++ ライブラリの一部です。

また、「画面」出力自体がストリームですよね?

はい、そうです。しかし実際には、デフォルトで画面に書き込む2 つのstdoutストリームがあります。/coutは通常の出力用で、stderr/cerrはエラー メッセージ用です。これはリダイレクトに役立ちstdoutます。ファイルにリダイレクトできますが、エラー メッセージは画面に表示されたままです。

于 2010-07-08T01:39:26.593 に答える