C語言中fgetc函數返回值為什么是int?


學習C語言的,文件操作,大都會用到它。

它的函數原型:

這個函數的返回值,是返回讀取的一個字節。如果讀到文件末尾返回EOF。
EOF其實就是一個宏
#define EOF (-1)
表示-1.
既然返回的是一個字節,為什么返回值確用4字節的int表示,不用unsigned char這1個字節類型表示,或直接
用char類型表示呢?

 

原因就是出在返回值要能表示-1.unsigned char表示無符號的,而這返回值,需要是-1才可以表示文件讀到末尾了,那可以char類型表示-1,但是-1在char類型中表示的值為0xff,然而它本身就是一個字節的內
容,如果文件中的一個字節是0xff,難道就認為文件結束,這是不合理的,用int作返回值,就不會出現這個問題,-1用int表示為0xffffffff;而字節值如果0xff這它返回的int值就會是0x000000ff,這樣就可以區別開字節值為
0xff和文件結束標識EOF.
注:EOF只是為了標識已經讀到文件末尾,它並不是一個存儲在文件中的字節。
因此,我們在寫程序時就不能寫如下的代碼:

#include<stdio.h> 
void main() 
{ 
  FILE *fp; 
  char c;
  fp=fopen("exist","r"); 
  while((c=fgetc(fp))!=EOF)//應該改為while(fgetc(fp) != EOF) 
  printf("%c",c); 
  fclose(fp); 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM