簡(jiǎn)介
創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都火鍋店設(shè)計(jì)等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
fread
功
能:
從一個(gè)流中讀數(shù)據(jù)
函數(shù)原型:
size_t
fread(
void
*buffer,
size_t
size,
size_t
count,
file
*stream
);
參
數(shù):
1.用于接收數(shù)據(jù)的地址(指針)(buffer)
2.單個(gè)元素的大小(size)
:?jiǎn)挝皇亲止?jié)而不是位,例如讀取一個(gè)整型數(shù)就是2個(gè)字節(jié)
3.元素個(gè)數(shù)(count)
4.提供數(shù)據(jù)的文件指針(stream)
返回值:成功讀取的元素個(gè)數(shù)
程序例
#include
int
main(void)
{
file
*stream;
char
msg[]
=
"this
is
a
test";
char
buf[20];
if
((stream
=
fopen("dummy.fil",
"w+"))
==
null)
{
fprintf(stderr,
"cannot
open
output
file.\n");
return
1;
}
/*
write
some
data
to
the
file
*/
fwrite(msg,
strlen(msg)+1,
1,
stream);
/*
seek
to
the
beginning
of
the
file
*/
fseek(stream,
0,
seek_set);
/*
read
the
data
and
display
it
*/
fread(buf,
strlen(msg)+1,
1,stream);
printf("%s\n",
buf);
fclose(stream);
return
0;
}
size=sizeof(char);
nitems=4;
其中sizeof(char)==1;
事實(shí)上int fread(void *ptr,int size,int nitems,FILE *stream);
讀取字符數(shù)為size*nitems個(gè)字符
只要有size*nitems==4即可
也就是說(shuō)有
size=1;
nitems=4;
或
size=2;
nitems=2;
或
size=4;
nitems=1;
C語(yǔ)言中:fread是一個(gè)函數(shù)。從一個(gè)文件流中讀數(shù)據(jù),最多讀取count個(gè)元素,每個(gè)元素size字節(jié),如果調(diào)用成功返回實(shí)際讀取到的元素個(gè)數(shù),如果不成功或讀到文件末尾返回 0。下面我們來(lái)看看c語(yǔ)言fread函數(shù)的用法。
fread()函數(shù)---- Reads data from a stream.
#includestdio.h
size_t fread( void *buffer, size_t size, size_t count,FILE *stream );
從一個(gè)文件流中讀數(shù)據(jù),讀取count個(gè)元素,每個(gè)元素size字節(jié).如果調(diào)用成功返回count.如果調(diào)用成功則實(shí)際讀取size*count字節(jié)
buffer的大小至少是 size*count 字節(jié).
return:
fread returns the number of full items actually read
實(shí)際讀取的元素?cái)?shù).如果返回值與count(不是count*size)不相同,則可能文件結(jié)尾或發(fā)生錯(cuò)誤.
從ferror和feof獲取錯(cuò)誤信息或檢測(cè)是否到達(dá)文件結(jié)尾.
DEMO:
[cpp] view plain#include stdio.h
#include process.h
#include string.h
int main()
{
FILE *stream;
char msg[]="this is a test";
char buf[20];
if ((stream=fopen("dummy.fil","w+"))==NULL)
{
fprintf(stderr,"cannot open output file.\n");
return 1;
}
/*write some data to the file*/
fwrite(msg,1,strlen(msg)+1,stream);
/*seek to the beginning of the file*/
fseek(stream,0,SEEK_SET);
/*read the data and display it*/
fread(buf,1,strlen(msg)+1,stream);
printf("%s\n",buf);
fclose(stream);
system("pause");
return 0;
}
DEMO2
[cpp] view plainint main(void)
{
FILE *stream;
char list[30];
int i,numread,numwritten;
/*open file in text mode:*/
if ((stream=fopen("fread.out","w+t"))!=NULL)
{
for (i=0;i25;i++)
{
list[i]=(char)('z'-i);
}
/*write 25 characters to stram*/
numwritten=fwrite(list,sizeof(char),25,stream);
printf("Wrote %d items\n",numwritten);
fclose(stream);
}
else
printf("Problem opening the file\n");
if ((stream=fopen("fread.out","r+t"))!=NULL)
{
numread=fread(list,sizeof(char),25,stream);
printf("Number of items read =%d\n",numread);
printf("Contents of buffer=%.25s\n",list);
fclose(stream);
}
else
{
printf("File could not be opened\n");
}
system("pause");
return 0;
}
c語(yǔ)言中fread函數(shù)語(yǔ)法為size_t?fread(?void?*restrict?buffer,?size_t?size,?size_t?count,?FILE?*restrict?stream?)。buffer是指向要讀取的數(shù)組中首個(gè)對(duì)象的指針,size是每個(gè)對(duì)象的大?。▎挝皇亲止?jié)),count是要讀取的對(duì)象個(gè)數(shù),stream是輸入流。通過(guò)fread函數(shù)可進(jìn)行數(shù)據(jù)讀取,返回成功讀取的對(duì)象個(gè)數(shù)。
擴(kuò)展資料:
fread函數(shù)從給定輸入流stream讀取最多count個(gè)對(duì)象到數(shù)組buffer中(相當(dāng)于以對(duì)每個(gè)對(duì)象調(diào)用size次fgetc),把buffer當(dāng)作unsignedchar數(shù)組并順序保存結(jié)果。流的文件位置指示器前進(jìn)讀取的字節(jié)數(shù)。
若出現(xiàn)錯(cuò)誤,則流的文件位置指示器的位置不確定。若沒(méi)有完整地讀入最后一個(gè)元素,則其值不確定,可能小于count。若size或count為零,則fread返回零且不進(jìn)行其他動(dòng)作。fread不區(qū)分文件尾和錯(cuò)誤,因此調(diào)用者必須用feof和ferror才能判斷發(fā)生了什么。
編輯本段C語(yǔ)言庫(kù)函數(shù)名:
簡(jiǎn)介
fread 功 能: 從一個(gè)流中讀數(shù)據(jù) 函數(shù)原型: size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream); 參 數(shù): 1.用于接收數(shù)據(jù)的地址(指針)(buffer) 2.單個(gè)元素的大?。╯ize) :?jiǎn)挝皇亲止?jié)而不是位,例如讀取一個(gè)int型數(shù)據(jù)就是4個(gè)字節(jié) 3.元素個(gè)數(shù)(count) 4.提供數(shù)據(jù)的文件指針(stream) 返回值:讀取的元素的個(gè)數(shù)
這個(gè)是引用的百度百科里面的內(nèi)容,詳細(xì)地址 是:
還有例子說(shuō)明,詳細(xì)看一下你就會(huì)明白了
fread是C語(yǔ)言標(biāo)準(zhǔn)為中的一個(gè)函數(shù)。它從一個(gè)文件流中讀數(shù)據(jù),最多讀取count個(gè)元素,每個(gè)元素size字節(jié),如果調(diào)用成功返回實(shí)際讀取到的元素個(gè)數(shù),如果不成功或讀到文件末尾返回 0。
fwrite是C語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),指向文件寫(xiě)入一個(gè)數(shù)據(jù)塊。示例如下:
//讀取一個(gè)完整的文件
#include?stdio.h
#include?stdlib.h
int?main()
{
FILE*?pFile;???//文件指針
long?lSize;???//?用于文件長(zhǎng)度
char*?buffer;?//?文件緩沖區(qū)指針
size_t?result;??//?返回值是讀取的內(nèi)容數(shù)量
pFile?=?fopen("myfile.bin"?,?"rb");
if?(pFile?==?NULL)?{fputs("File?error",?stderr);?exit(1);}????//?如果文件錯(cuò)誤,退出1
//?獲得文件大小
fseek(pFile?,?0?,?SEEK_END);?//?指針移到文件末位
lSize?=?ftell(pFile);??//?獲得文件長(zhǎng)度
rewind(pFile);??//?函數(shù)rewind()把文件指針移到由stream(流)指定的開(kāi)始處,?同時(shí)清除和流相關(guān)的錯(cuò)誤和EOF標(biāo)記
//?為整個(gè)文件分配內(nèi)存緩沖區(qū)
buffer?=?(char*)?malloc(sizeof(char)?*?lSize);?//?分配緩沖區(qū),按前面的?lSize
if?(buffer?==?NULL)?{fputs("Memory?error",?stderr);?exit(2);}??//?內(nèi)存分配錯(cuò)誤,退出2
//??該文件復(fù)制到緩沖區(qū)
result?=?fread(buffer,?1,?lSize,?pFile);?//?返回值是讀取的內(nèi)容數(shù)量
if?(result?!=?lSize)?{fputs("Reading?error",?stderr);?exit(3);}?//?返回值如果不和文件大小,讀錯(cuò)誤
//?terminate?//?文件終止
fclose(pFile);
free(buffer);
return?0;
}
綜合使用的例子。
#include?stdio.h
int?main()
{
FILE*?pFile;
float?buffer[]?=?{?2.0?,?3.0?,?8.0?};
pFile?=?fopen("myfile.bin"?,?"wb");?//?打開(kāi)文件寫(xiě)操作
fwrite(buffer?,?1?,?sizeof(buffer)?,?pFile);?//?把浮點(diǎn)數(shù)組寫(xiě)到文件?myfile.bin
fclose(pFile);?//?關(guān)閉文件
float?read[3];
pFile?=?fopen("myfile.bin"?,?"rb");?//?重新打開(kāi)文件讀操作
fread(read?,?1?,?sizeof(read)?,?pFile);?//?從文件中讀數(shù)據(jù)
printf("%f\t%f\t%f\n",?read[0],?read[1],?read[2]);
fclose(pFile);?//?關(guān)閉文件
return?0;
}