用fread和fwrite实现文件复制。

//用fread和fwrite实现文件复制,文件名fread_fwrite_copy.c#include<stdio.h>#include<stdlib.h>#inclu... //用fread和fwrite实现文件复制,文件名 fread_fwrite_copy.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char *argv[])
{
FILE *fp_src,*fp_des;//两个文件指针
char buffer[10],buffer1[120];
int i,j;
if((fp_src=fopen(argv[1],"r+"))==NULL)//打开文件1,需要复制的文件
{
perror("open1");
exit(EXIT_FAILURE);
}
if((fp_des=fopen(argv[3],"w+"))==NULL)//打开新的文件,需要把数据复制进去
{
perror("open2");
exit(EXIT_FAILURE);
}

setvbuf(fp_src,buffer1,_IOLBF,120);//显示设置缓冲区位置及类型

do
{
memset(buffer,'\0',10);//将buffer中前10个字节替换为'\0',并返回buffer
i=fread(buffer,1,10,fp_src);
j=fwrite(buffer,1,1,fp_des);
}
while(i==10);

//关闭文件
fclose(fp_src);
fclose(fp_des);
}

第一:我想问的是,在fread和fwrite里面,其中第二第三个参数我到底如何考虑。
第二:在linux终端下我编译是没有问题的,这是资料书上的原题,
编译:gcc -o fread_fwrite_copy fread_fwrite_copy.c
./fread_fwrite_copy fread_fwrite_copy.c fread_fwrite_copy1.c

是能实现拷贝的功能,但是结果出来后我cat fread_fwrite_copy1.c,出来的是乱码。我开始以为打开方式不对,在fopen里面的打开方式我改为“rb+”和“wb+”,一样出现乱码,我个人认为是在fread和fwrite里面的第二第三个参数设定有关,或者是其他。我接触高级编程不久,不知道有哪个方面的细节没考虑到。
展开
 我来答
bdzhangzerun
2012-12-20 · 超过28用户采纳过TA的回答
知道答主
回答量:97
采纳率:50%
帮助的人:67.7万
展开全部
纯粹是代码的错误 乱码跟 fwrite 和 fread 的第二个和第三个参数无关,你的代码中 fread 读出了10个字节 ,你fwrite的时候写入了 1 个字节,剩下的都丢了 ,这样生成的文件能不是乱码么?

关键要理解这两个参数的意思,写入和读出的字节数是 第二个参数乘以第三个参数,所以你fwrite的时候 第二和第三个参数用 (1,,10)(10,1)(2,5)都行,这两个参数用哪一种只影响fwrite和fread的返回值,执行成功的返回值为第三个参数。希望对你有用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lgao622
推荐于2016-04-29 · 知道合伙人软件行家
lgao622
知道合伙人软件行家
采纳数:1137 获赞数:6550
毕业于武汉工程大学邮电与信息工程学院通信专业,软件行业,4年工作经验。

向TA提问 私信TA
展开全部
do
{
memset(buffer,'\0',10);//将buffer中前10个字节替换为'\0',并返回buffer
i=fread(buffer,1,10,fp_src);
j=fwrite(buffer,1,10,fp_des);//读十个 写也要十个,你的是 1
}
追问
按你的说法,我把j=fwrite(buffer,1,10,fp_des)改了,cat出来之后不是乱码,我觉得是fread和fwrite第二第三个参数要对应起来,书上是把fwrite的第三个参数改为i,为fread的返回值,我看错为1了。小细节问题了。解决了乱码问题了。但是我想继续问的是,第二参数怎么理解?解锁说,要写入内容的单字节数;是符号类型的大小吗?例如char型应该为1,int型的为4.?
追答

float 4
double 8

一般写成 sizeof( 类型 );//就是 buffer的类型
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Mis_丫
2012-12-20 · TA获得超过374个赞
知道小有建树答主
回答量:272
采纳率:100%
帮助的人:230万
展开全部
fread(buffer,sizeof(char),10*sizeof(char),fp_src);试试

如果不行 你用的什么版本的linux,输入有没有中文数据,终端支持不支持中文显示,代码没问题,是linux下编码的问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式