用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里面的第二第三个参数设定有关,或者是其他。我接触高级编程不久,不知道有哪个方面的细节没考虑到。 展开
#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里面的第二第三个参数设定有关,或者是其他。我接触高级编程不久,不知道有哪个方面的细节没考虑到。 展开
3个回答
展开全部
纯粹是代码的错误 乱码跟 fwrite 和 fread 的第二个和第三个参数无关,你的代码中 fread 读出了10个字节 ,你fwrite的时候写入了 1 个字节,剩下的都丢了 ,这样生成的文件能不是乱码么?
关键要理解这两个参数的意思,写入和读出的字节数是 第二个参数乘以第三个参数,所以你fwrite的时候 第二和第三个参数用 (1,,10)(10,1)(2,5)都行,这两个参数用哪一种只影响fwrite和fread的返回值,执行成功的返回值为第三个参数。希望对你有用
关键要理解这两个参数的意思,写入和读出的字节数是 第二个参数乘以第三个参数,所以你fwrite的时候 第二和第三个参数用 (1,,10)(10,1)(2,5)都行,这两个参数用哪一种只影响fwrite和fread的返回值,执行成功的返回值为第三个参数。希望对你有用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于2016-04-29 · 知道合伙人软件行家
关注
展开全部
do
{
memset(buffer,'\0',10);//将buffer中前10个字节替换为'\0',并返回buffer
i=fread(buffer,1,10,fp_src);
j=fwrite(buffer,1,10,fp_des);//读十个 写也要十个,你的是 1
}
{
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的类型
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fread(buffer,sizeof(char),10*sizeof(char),fp_src);试试
如果不行 你用的什么版本的linux,输入有没有中文数据,终端支持不支持中文显示,代码没问题,是linux下编码的问题
如果不行 你用的什么版本的linux,输入有没有中文数据,终端支持不支持中文显示,代码没问题,是linux下编码的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询