簡體   English   中英

fread(&c,1,1,input)和fgetc(input)之間的區別,用於讀取一個字節

[英]Difference between fread(&c, 1, 1, input) and fgetc(input) for reading one byte

我目前正在嘗試一次讀取一個PNG文件,並且在使用fread((void*), size_t, size_t, FILE*)fgetc(FILE*)時得到不同的結果。

我本質上是想“一次讀取一個字節,直到文件結束”,並且我有兩種不同的方式。 在這兩種情況下,我都可以通過以下方式以二進制模式打開所需的圖像:

FILE* input = fopen( /* Name of File */, 'rb');

並將每個字節存儲在一個字符char c

fread: while( fread(&c, 1, 1, input) != 0) //read until there are no more bytes read

fgetc: while( (c = fgetc(input)) != EOF) //Read while EOF hasn't been reached

fread情況下,我讀取了我需要做的所有字節。 讀取功能在文件末尾停止,我最終打印了所有380,000字節(這很有意義,因為輸入文件是380kB文件)。

但是,在fgetc情況下,一旦到達值ff (即-1,即宏EOF的值)的字節,我便停止。

我的問題是,如果兩個函數都在做相同的事情,一次讀取一個字節,即使fread遇到一個帶有EOF值的字節,fread如何知道繼續讀取? 並以此為基礎,讀取文件時如果通過EOF ,fread如何知道何時停止?

fgetc返回一個int ,而不是一個char EOF (以及許多實際的字符代碼)無法存儲在char ,嘗試這樣做會導致未定義的行為。 所以不要那樣做。 將返回值存儲在int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM