質問: malloc(sizeof(char) * 1024 * 1024); assert(text != NULL); while((fgets(text, sizeof(char)*2, fp)) != NULL) { printf("%s", text); // 「abcde」と表示される。しかし、char型*2分を上限にしているので、ナル文字含めて「a」と表示されるはずでは? } free(text); fclose(fp); return 0; } ``` <結果> 「entry.c」をコンパイルして実行すると、「abcde」と出力されます。 しかし、fgetsの第二引数にはchar型*2分を渡しているので、ナル文字含めて「a」と表示されるはずではないのでしょうか。 ### 補足情報 上述のコードはCygwin環境下でコンパイル・実行しました。
回答: > > fgetsの第二引数にはchar型*2分を渡しているので、ナル文字含めて「a」と表示されるはずではないのでしょうか。 > > > はい、そのとおりです。ただ、1文字読んだ段階ではまだ文字が残っているので`fgets`の結果は`buf`を返し(man)、`while`の条件は成立しないので、**再度ループが実行されます**。これは、最後の文字を読み終わるまで続きます。