如何理解fgetc函式其返回值型別必為int。

2021-10-02 23:58:22 字數 884 閱讀 8035

fgetc函式

函式原型:int fgetc(file* stream);

引數說明:引數為乙個檔案指標,表明可以從任何流中讀取字元。

返回值說明:讀取成功返回該字元,讀取失敗或者讀取到檔案末尾(eof)則返回eof(-1)。

返回值的型別注意是int型別而不是char型別,如果定義乙個char型別的變數會出現以下兩種非預期的錯誤。

char ch; 

while(ch = getc(fp)) != eof)

/*ch的值一定是0x00-0xff(就算getc函式讀到了eof,但是由於接受的是unsigned char,那麼這個-1就會溢位成0xff),一旦和eof這個int型別比較,那麼ch就會提公升為int型別

無符號低位元組變高位元組,高位補0.於是ch的值由0x00000000-0x000000ff。

在有符號數的範疇下,這個範圍永遠非負,所以該迴圈永遠進行。

*/

char ch; 

while(ch = getc(fp)) != eof)

/*假如讀取乙個字元為0xff(這是有可能的擴充套件ascii碼字元中有值為255的ascii碼),那麼ch = 0xff(帶符號),那麼在和eof進行比較時,同樣被提公升為int型別,有符號低位元組變高位元組,高位補符號位。

提公升後的ch = 0xffffffff。這與eof(巨集定義為 -1)的補碼形式一樣。那麼字元ascii碼值為0xff的字元就會被解釋成eof檔案結束符,事實上它並不是eof。

*/

【注】 如果不了解整型間轉換機制的同學可以去閱讀這篇部落格。下附鏈結

資料轉換(整型轉換)。

C語言fgetc 函式的返回值

c語言fgetc 函式的返回值 本文 學習c語言的,檔案操作,大都會用到它。它的函式原型 int fgetc file stream 這個函式的返回值,是返回讀取的乙個位元組。如果讀到檔案末尾返回eof。eof其實就是乙個巨集 define eof 1 表示 1.既然返回的是乙個位元組,為什麼返回值...

c語言中fgetc 函式返回值的問題

fgetc返回值的型別 以 1 中的 為例 fgetc 返回型別為int,我們可以將其返回值賦給乙個int型別變數,如 1 中的 即使是遇到字元0xff blank的ascii碼,不是eof while迴圈也不會結束,因為0xff會被轉化0x000000ff,顯然這與0xffffffff eof 是...

函式中如何返回值

兩個例子 一 單鏈表定位,並取出該值 define crt secure no warnings include include include typedef int elemtype typedef struct node lnode 單鏈表 lnode initial lnode first,...