1

私は次のコードを持っています、

#include<stdio.h>
#include<stdlib.h>

int main()
{
    //freopen("file1","w",stdout);
    char str[]="command line with file";
    char s[]="extra string";
    puts(str);
    puts(s);
    system("PAUSE");    
    return 0;
}

コンソールに出力を表示すると、次のように表示されます。

command line with file
extra string
Press any key to continue . . . 

また、コード内のコメント行を削除してファイルに出力を書き込む場合も、同じ出力が期待されます。しかし、それは次のように出力します、

Press any key to continue . . . 
command line with file
extra string

なぜこのファイルとコンソール出力の違いは?ここでは、system( "PAUSE")関数が文字列出力を担当しますPress any key to continue . . .

4

1 に答える 1

6

端末に書き込む場合、stdoutは行バッファリングされます。各行をすぐに書き込みます。ファイルに書き込むときは、ブロックバッファされます。バッファに数キロバイトを格納し、呼び出しfflushたとき、バッファがいっぱいになったとき、またはプログラムが終了したときにそれらをフラッシュします。一時停止メッセージは、元のプロセスの前に終了する別のプロセスによって書き込まれます。その時点で、バッファー(バッファーがある場合)をフラッシュする必要があります。次に、元のプロセスがsystem()終了し、終了してmain()終了し、2つのテスト文字列を含むバッファをフラッシュします。

于 2012-07-02T10:28:30.160 に答える