質問: ### 質問について 以前こちらでご教示いただいたsetvbuf()関数についての挙動がよくわからず、 あらためてご教示いただけましたらと思います。 具体的には以下のソースコードの最後のfprintf()の結果について、 なぜ出力結果の"Hello, world!"の数が二つになるのでしょうか? ・今までstdoutに書き込まれた内容がすべて残るので3つ ・fflush()で追い出されて表示なし のどちらかになると思ったのですが中途半端な結果になり驚いています。 なぜ出力結果のような挙動になるのか、ご教示いただけないでしょうか。 ### 該当のソースコード ``` #include #include #include void hello() { printf("Hello, world!\n"); } int main() { char mybuf[8192]; setvbuf(stdout, mybuf, _IOFBF, sizeof(mybuf)); hello(); fflush(stdout); hello(); hello(); fprintf(stderr, "buf:[%s]\n", mybuf); fflush(stdout); fprintf(stderr, "buf:[%s]\n", mybuf); return 0; } ``` ### 実行結果 ``` ./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 以上、よろしくお願いいたします。
回答: mybufの中身が初期化されていないので、たまたま ¥0 が出てくるまでのメモリの内容が出力されているだけと思います。