我们来看fread()和fwrite()函数都接受四个参数。
fread读取nmwmb个对象,每个对象size大小。从stream读取到ptr中。fwrite()也类似。从ptr中读取数据到stream中,读取nmemb个对象每个对象size大小。但是fwrite()的ptr只拥有读的权限。
如果读写成功,则返回读写对象个数。
如果一个文件有很多字符
fread(fps,1,10,fpd);
fread(fps,10,1,fpd);
两个函数内容都是读取10个字符。前者返回成功对象10,后者返回成功对象1。
当一个文件只有5个字符时。
fread(fps,1,10,fpd);
fread(fps,10,1,fpd);
前者返回成功对象5,而后者返回0.后者对象需满足10大小,最大的大小只有5。所以没有成功对象。所以当不知道文件字符大小时,建议使用多对象,单字符的输入读写方式。
使用示例
#include<stdio.h>
#include<stdlib.h>
#define BUFSIZE 1024
int main(int argc,char argv)
{
FILE* fps,*fpd;
char buf[BUFSIZE];
int n;
if(argc<3)
{
fprintf(stderr,"Usage: %s<src_file>,<des_file>\n");
exit(1);
}
fps=fopen(argv[1],"r");
if(fps==NULL)
{
perror("fopen()");
exit(1);
}
fpd=fopen(argv[2],"w");
if(fpd==NULL)
{
fclose(fps);//防止内存泄漏
perror("fopen()");
exit(1);
while(1)
{
if(n=fread(buf,1,BUFSIZE,fps)>0)
fwrite(buf,1,n,fpd);
fclose(fps);
fclose(fpd);
}
}
}