4

C では、改行文字を出力するまで出力がターミナルに出力されないことがあります\n。例えば:

int main()
{
   printf("Hello, World");
   printf("\n");
   return 0;
}

Hello World は次まで出力されませんprintf (これは、gdb にブレークポイントを設定することでわかります)。誰かがなぜこれが起こるのか、そしてそれを回避する方法を説明できますか?

ありがとう!

4

2 に答える 2

8

これはパフォーマンス上の理由から行われます。コンソールへのデータの受け渡しは (実行速度の点で) 文字単位で行うにはコストがかかりすぎます。これが、改行が出力されるまで出力がバッファリングされる理由です。文字は、出力する時間になるまで配列に収集され、その時点で文字列全体がコンソールに渡されます。次のように、出力を明示的に強制することもできます。

fflush(stdout);
于 2013-03-30T01:44:25.660 に答える
4

さらに、 setvbuf(3)fflush()でバッファリング オプションを設定できます。

于 2013-03-30T01:46:43.573 に答える