說(shuō)明:如果您有任何疑問(wèn)或想咨詢(xún)其他業(yè)務(wù)請(qǐng)撥打電話(huà) 400 685 0732
全網(wǎng)監(jiān)測(cè)海量數(shù)據(jù)按需發(fā)布監(jiān)測(cè)預(yù)警
實(shí)時(shí)把握輿情動(dòng)態(tài)精準(zhǔn)追溯信息源頭
fread是一個(gè)函數(shù),它從文件流中讀數(shù)據(jù),最多讀取count個(gè)項(xiàng),每個(gè)項(xiàng)size個(gè)字節(jié),如果調(diào)用成功返回實(shí)際讀取到的項(xiàng)個(gè)數(shù)(小于或等于count),如果不成功或讀到文件末尾返回0。返回真實(shí)讀取的項(xiàng)數(shù),若大于count則意味著產(chǎn)生了錯(cuò)誤。另外,產(chǎn)生錯(cuò)誤后,文件位置指示器是無(wú)法確定的。若其他stream或buffer為空指針,或在unicode模式中寫(xiě)入的字節(jié)數(shù)為奇數(shù),此函數(shù)設(shè)置errno為EINVAL以及返回0.
fread函數(shù)——c語(yǔ)言中fread函數(shù)怎么用
C語(yǔ)言中:fread是一個(gè)函數(shù)。從一個(gè)文件流中讀數(shù)據(jù),最多讀取count個(gè)元素,每個(gè)元素size字節(jié),如果調(diào)用成功返回實(shí)際讀取到的元素個(gè)數(shù),如果不成功或讀到文件末尾返回0。函數(shù)原型:size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);參數(shù):buffer用于接收數(shù)據(jù)的內(nèi)存地址size要讀的每個(gè)數(shù)據(jù)項(xiàng)的字節(jié)數(shù),單位是字節(jié)count要讀數(shù)據(jù)項(xiàng)的個(gè)數(shù),每個(gè)數(shù)據(jù)項(xiàng)size個(gè)字節(jié).stream輸入流的指針?lè)祷刂担悍祷貙?shí)際讀取的元素個(gè)數(shù)。如果返回值與count不相同,則可能文件結(jié)尾或發(fā)生錯(cuò)誤。從ferror和feof獲取錯(cuò)誤信息或檢測(cè)是否到達(dá)文件結(jié)尾。
C中fread()函數(shù)的返回值
這個(gè)問(wèn)題很容易搞錯(cuò),并導(dǎo)致很多問(wèn)題,需要強(qiáng)調(diào)的是fread函數(shù)返回的并不是字節(jié)數(shù)。
realRead=fread(buf,item,count,fp)(每次讀item大小的數(shù)據(jù)塊,分count次來(lái)讀。)
而是返回的是成功有效的讀取的item元素的個(gè)數(shù),而成功讀入的字節(jié)數(shù)則是realRead*sizeof(item)
一般說(shuō)來(lái)realRead是小于count的,很巧的情況就剛好為count.除非文件大小剛好為item大小的整數(shù)倍。
返回的是真實(shí)讀入item元素的個(gè)數(shù),雖然讀了count次,但是真正讀到的有效個(gè)數(shù)為realRead個(gè)
真實(shí)讀入字節(jié)數(shù)就為realRead*sizeof(item)
RETURNVALUE
freadandfwritereturnthenumberofitemssuccessfullyreadorwritten(i.e.,notthenumberof
characters).Ifanerroroccurs,ortheend-of-fileisreached,thereturnvalueisashortitem
count(orzero).
freaddoesnotdistinguishbetweenend-of-fileanderror,andcallersmustusefeof(3)andferror(3)
todeterminewhichoccurred.
fread(從文件流讀取數(shù)據(jù))
表頭文件#include<stdio.h>
定義函數(shù)size_tfread(void*ptr,size_tsize,size_tcount,FILE*stream);
函數(shù)說(shuō)明fread()用來(lái)從文件流中讀取數(shù)據(jù)。參數(shù)stream為已打開(kāi)的文件指針,參數(shù)ptr指向欲存放讀取進(jìn)來(lái)的數(shù)據(jù)空間,讀取的字節(jié)數(shù)以參數(shù)size*count來(lái)決定。
Fread()會(huì)返回實(shí)際讀取到的count數(shù)目,如果此值比參數(shù)count來(lái)得小,則代表可能讀到了文件尾了或者有錯(cuò)誤發(fā)生(前者幾率大),這時(shí)必須用feof()或ferror()來(lái)決定發(fā)生什么情況。
返回值返回實(shí)際讀取到的count數(shù)目。
fread返回的不是字節(jié)數(shù),
當(dāng)且僅當(dāng)下面這么用的時(shí)候,返回值才是字節(jié)數(shù)(當(dāng)然因?yàn)榍『靡粋€(gè)數(shù)據(jù)塊大小為1個(gè)字節(jié),相當(dāng)于realRead*1)
charbuff[size];
FILE*fp;
…
realRead=fread(buff,1,size,fp);
…
如果是:fread(buff,size,1,fp)
返回1表示讀取了size字節(jié),返回0表示讀取數(shù)量不夠size字節(jié)
直接在文件中讀寫(xiě)結(jié)構(gòu)體的程序是不可移植的,如果在一種平臺(tái)上編譯運(yùn)行writebin.c程序,把生成的recfile文件拷到另一種平臺(tái)并在該平臺(tái)上編譯運(yùn)行readbin.c程序,則不能保證正確讀出文件的內(nèi)容,因?yàn)椴煌脚_(tái)的大小端可能不同(因而對(duì)整型數(shù)據(jù)的存儲(chǔ)方式不同),如果大家還想了解更多與之有關(guān)的信息,歡迎關(guān)注我們文軍營(yíng)銷(xiāo)的官網(wǎng)。
推薦閱讀
說(shuō)明:如果您有任何疑問(wèn)或想咨詢(xún)其他業(yè)務(wù)請(qǐng)撥打電話(huà) 400 685 0732