這個問題很容易搞錯,並導致很多問題,需要強調的是fread函式返回的並不是位元組數。
realread = fread(buf,item,count,fp) (每次讀item大小的資料塊,分count次來讀。)
而是返回的是成功有效的讀取的item元素的個數,而成功讀入的位元組數則是realread * sizeof(item)
一般說來realread 是小於count的,很巧的情況就剛好為count.除非檔案大小剛好為item大小的整數倍。
返回的是真實讀入item元素的個數,雖然讀了count次,但是真正讀到的有效個數為realread個
真實讀入位元組數就為realread*sizeof(item)
return value
fread and fwrite return the number of items successfully read or written (i.e., not the number of
characters). if an error occurs, or the end-of-file is reached, the return value is a short item
count (or zero).
fread does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3)
to determine which occurred.
fread(從檔案流讀取資料)
表頭檔案 #include
定義函式 size_t fread(void * ptr,size_t size,size_t count,file * stream);
函式說明 fread()用來從檔案流中讀取資料。引數stream為已開啟的檔案指標,引數ptr 指向欲存放讀取進來的資料空間,讀取的位元組數以引數size*count來決定。
fread()會返回實際讀取到的count數目,如果此值比引數count來得小,則代表可能讀到了檔案尾了或者有錯誤發生(前者機率大),這時必須用feof()或ferror()來決定發生什麼情況。
返回值 返回實際讀取到的count數目。
fread返回的不是位元組數,
當且僅當下面這麼用的時候,返回值才是位元組數(當然因為恰好乙個資料塊大小為1個位元組,相當於realread*1)
char buff[size];
file *fp;
...realread = fread(buff, 1, size, fp);
...如果是: fread(buff, size, 1, fp)
返回1表示讀取了size位元組,返回0表示讀取數量不夠size位元組
fread函式的返回值
先複製一段man fread 3 linux programmer s manual fread 3 name fread,fwrite binary stream input output synopsis include size t fread void ptr,size t size,siz...
fread 返回值的問題
linux programmer s manual name fread,fwrite binary stream input output synopsis include size t fread void ptr,size t size,size t nmemb,file stream siz...
例項講解C語言中fread 函式的返回值問題
最近在linux下用c編寫乙個的藍芽模組公升級程式,用到 fread 函式時候發現返回值始終為1,看了很多帖子說的比較囉嗦,所以博主自己總結了乙份。函式 f read 從檔案流讀取資料 表頭檔案 include 函式定義 size t fread void ptr,size t size,size ...