C中fread 函式的返回值

2021-09-08 22:33:15 字數 1379 閱讀 5599

這個問題很容易搞錯,並導致很多問題,需要強調的是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 ...