Endowsの日記: Endows の へっぽこプログラマ日誌 第1回 2
日記 by
Endows
こんな感じでちょっと悩む。
FILE *fp;
char c;
fp=fopen("hogehoge",r);
while((c=fgetc(fp))!=EOF){
printf("%c",c);
}
で、なんかファイル全部読みきらずに終わっちゃうぞ、と。
ちょっと man なんかで調べただけで、一発で解決しましたが。
( ヒント : fgetc が返す型は? …では、 &hFF だと…? )
以前も同じ罠にひっかかった気のする、学習能力の乏しい Endows でした。
同じミスを (スコア:1)
で、(c == (char)EOF)の場合に問題が起こることは分かっていたので、「扱いづらいfreadかシステムコール使うしかないじゃないか。ANSI Cつかえね~」なんて思ってました。おはずかし...
そんなこんな(ほかに、scanfや文字列関係の関数の扱いづらさなども)で、しばらくの間はANSI Cライブラリを一切使わないスタイルでプログラミングしていたり。(どうせMac OSで動けばよかったし(マテ))
今なら文字列関係の関数の一部は使う...かな?
巧妙に潜伏したバグは心霊現象と区別が付かない。
Re:同じミスを (スコア:1)
過去に書いたプログラムを引っ張り出す機会があったので調べてみたところ、今回含めて3回同じトラップに引っかかった形跡がありました。今度こそ頭に叩きこんだ…つもり。
実際、文字列操作メインのプログラムを書いていると(そういうのしか書いたこと無いような…)、注意しなければならないことが多くて K&R本は手放せないです。それ以前の技量の問題? う~ん、たしかにその通り…