C言語なら俺に聞け(入門篇) Part 6
■ このスレッドは過去ログ倉庫に格納されています
0200デフォルトの名無しさん
2007/01/07(日) 19:02:23・なんで素直にfgets()を使わないのか。
・MAX_LINEを越える行長だった場合はバッファオーバーフローを引き起こすぞ。
こんな用途でいちいちグローバル変数を用いるのもよろしくない。
・fgetc()の戻り値をチェックせずにbufに突っ込むのはよろしくない。
EOFが返された時、多分0xffのような値がbuf末尾に入る。
・このままだとファイル末尾に改行が無いようなケースでは、その行は
破棄されることになる。
どうしてもそういうデザインでやりたいのなら、せめて以下のように
書いたほうが良い。
int getline(FILE *fp)
{
int i, c;
for (i = 0; i < MAX_LINE-1 && (c = fgetc(fp)) != EOF && c != '\n'; ++i)
buff[i] = c;
buff[i] = '\0';
return i;
}
■ このスレッドは過去ログ倉庫に格納されています