###質問について
以前こちらでご教示いただいたsetvbuf()関数についての挙動がよくわからず、
あらためてご教示いただけましたらと思います。
具体的には以下のソースコードの最後のfprintf()の結果について、
なぜ出力結果の"Hello, world!"の数が二つになるのでしょうか?
・今までstdoutに書き込まれた内容がすべて残るので3つ
・fflush()で追い出されて表示なし
のどちらかになると思ったのですが中途半端な結果になり驚いています。
なぜ出力結果のような挙動になるのか、ご教示いただけないでしょうか。
###該当のソースコード
C
1#include <assert.h> 2#include <stdio.h> 3#include <string.h> 4 5void hello() 6{ 7 printf("Hello, world!\n"); 8} 9 10int main() 11{ 12 char mybuf[8192]; 13 14 setvbuf(stdout, mybuf, _IOFBF, sizeof(mybuf)); 15 hello(); 16 fflush(stdout); 17 hello(); 18 hello(); 19 fprintf(stderr, "buf:[%s]\n", mybuf); 20 21 fflush(stdout); 22 23 fprintf(stderr, "buf:[%s]\n", mybuf); 24 25 return 0; 26}
###実行結果
./a.out Hello, world! buf:[Hello, world! Hello, world! ] Hello, world! Hello, world! buf:[Hello, world! Hello, world! ]
###補足情報(言語/FW/ツール等のバージョンなど)
Ubuntu 16.04 + GCC5.4.0
以上、よろしくお願いいたします。
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/08/09 15:19