首先这个问题捆扰了我好长一段时间,但每次都很模糊的看下参数的区别,今天终于弄懂了这个区别
C标准库提供的文件函数fread和fwrite的原型为:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
第一次用的时候觉得接口不够简洁:size*count来表示一共有多少字节就行了,不必分开成两个参数。
由于头脑中有这种先入为主的思想,所以每次使用这两个函数的时候,size和count的顺序都是随意的,反正乘起来是那么多个字节就行。
其实不是这样的!这两个函数的size的大小是有限制的,fread中,如果size过大,读出数据会失败;fwrite中,size过大,会导致返回的写入字节数不正确,但是数据还是写成功了。size的最大限制是多少目前还没有测试,所以大家使用的时候注意不要把size这个值设置得过大。
******************************************************************************************************************************
代码如下:
#include <stdio.h>
int copy_file(const char * src_name,const char * dst_name)
{
FILE * src = NULL,* dst = NULL;
char buffer[1024];
int len,cnt = 0;
if((src = fopen(src_name,"rb")) == NULL)
{
fprintf(stderr,"open source file %s failure\n",src_name);
return -1;
}
if((dst = fopen(dst_name,"wb+")) == NULL)
{
fclose(src);
fprintf(stderr,"create destion file %s failure\n",dst_name);
return -2;
}
#if 1
while((len = fread(buffer,1,sizeof(buffer),src))>0)
{
cnt+= len;
fwrite(buffer,1,len,dst);
}
#endif
#if 0
//注意这样写是错误写法,这样造成最一段数据尺寸有错
while((len = fread(buffer,sizeof(buffer),1,src))>0)------>就是因为给的buffer太大了,你可以定义buffer小点就这个段程序就可以用了,我定义 成10
{
cnt+= len;
fwrite(buffer,sizeof(buffer),len,dst);
}
#endif
fclose(dst);
fclose(src);
printf("copy file %s to %s success,bytes is %d\n",src_name,dst_name,cnt);
return 0;
}
int main()
{
copy_file("1.pdf","11.pdf");
}