在書中的Linux系統編程我看過一些這樣的:龜etc,檢查EOF
fgetc
解讀爲unsigned char
投人物返回到文件或錯誤的前端部的int
或EOF
。使用fgetc
一個常見的錯誤是:char c; if ((c = fgetc()) != EOF) {...}
這段代碼的正確版本是:
int c; if ((c = fgetc()) != EOF) { printf("%c", (char)c); ... }
那麼,爲什麼我不能用EOF
比較之前投下了返回值char
?爲什麼我必須比較EOF
與int
?由於EOF
定義爲-1
,是不是通常鑄造成char
?
有沒有平臺/編譯器不正確?
[「while(!feof(file))」的可能重複始終是錯誤的](http://stackoverflow.com/questions/5431941/while-feof-file-is-always-wrong) – jww
@jww:這個問題沒有使用'feof()',所以它不是'['while(!feof(file))''總是錯誤]的重複(http://stackoverflow.com/questions/5431941/while-feof-文件是 - 總是錯的)」。 –