C语言复制文件问题

#include<stdio.h>voidmain(){FILE*f,*y;chara[20],b[20],ch;printf("请输入第一个文件名:");gets(a)... #include <stdio.h>
void main()
{ FILE *f,*y;
char a[20],b[20],ch;
printf("请输入第一个文件名:");
gets(a);
printf("请输入第二个文件名:");
gets(b);
f = fopen(a,"r+");
y = fopen(b,"r+");
ch = fgetc(f);
while(ch!=EOF)
{
fputc(ch,y);
ch = fgetc(f);
if(ch!=EOF){
printf("复制文件中");
} else
{
printf("复制完成");
}

}
fclose(f);
fclose(y);
system("pause");

}

可以运行,但是后面都出错(什么stream!=null);
展开
 我来答
一骑当后
2015-07-05 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40299 获赞数:306424
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部

  c语言中有很多对文件进行操作的工具,可以利用fgetc()和fputc()来实现文件的拷贝功能。

  比如:目的:在/home/cosmos/c_code目录下有一个名为students.txt的源文件,想将其拷贝到目录/home/cosmos/下,并命名为students_copy.txt。

代码如下:

#include<stdio.h>

int main(int argc, char *argv[])  //argc表示命令参数个数, argv[]表示参数名称
{
    int c;
    FILE *fpSrc, *fpDest;  //定义两个指向文件的指针
    fpSrc = fopen(argv[1], "rb");    //以读取二进制的方式打开源文件
    if(fpSrc==NULL){
        printf( "Source file open failure.");  //源文件不存在的时候提示错误
        return 0;
    }
    fpDest = fopen(argv[2], "wb");  // //以写入二进制的方式打开目标文件
    if(fpDest==NULL){
        printf("Destination file open failure.");
        return 0;
    }
    while((c=fgetc(fpSrc))!=EOF){   //从源文件中读取数据知道结尾
        fputc(c, fpDest);
    }
    fclose(fpSrc);  //关闭文件指针,释放内存
    fclose(fpDest);
    return 0;
}

//输入命令 gcc CopyFile.c -o CopyFile 编译程序源文件得到可执行文件CopyFile
输入运行命令./CopFile   /home/cosmos/c_code/students.txt    /home/cosmos/students_copy.txt
然后打开 students_copy.txt检验一下复制是否成功。
傲贾
2012-04-21 · 超过49用户采纳过TA的回答
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:87.7万
展开全部
出现stream!=null的原因是文件名过长,超出那数组的大小!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lylxy1965
2011-05-01 · TA获得超过2413个赞
知道小有建树答主
回答量:436
采纳率:100%
帮助的人:214万
展开全部
印象中这种错误应该属于定义的指针f,y没有做内存空间长度预分配,使用完毕后没有释放空间所致,详细的已记不太清了,你可以看一下 <alloc.h> 中的malloc()及free()两个函数,前一个分配内存空间,后一个释放空间,配合使用。
N多年前用过,现在已经记不清了,看无人回答,凭映像提示一下,希望有所帮助。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12300a9
2011-05-01
知道答主
回答量:21
采纳率:0%
帮助的人:11.9万
展开全部
打开文件方式问题y = fopen(b,"r+");改为
y = fopen(b,"w+");

printf("复制文件中");每循环一次都执行一次 会显示很多 放在循环前面好些
追问
谢谢,还是不行
追答
system("pause");需要引用头文件stdlib.h   #include

测试可行啊

更改后的程序
#include
#include
void main()
{ FILE *f,*y;
char a[20],b[20],ch;
printf("请输入第一个文件名:");
gets(a);
printf("请输入第二个文件名:");
gets(b);
f = fopen(a,"r+");
y = fopen(b,"w+");
ch = fgetc(f);
printf("复制文件中...\n");
while(ch!=EOF)
{
fputc(ch,y);
ch = fgetc(f);
if(ch!=EOF){

} else
{
printf("复制完成\n");
}

}
fclose(f);
fclose(y);
system("pause");

}

ps:文件的默认路径是源文件目录
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sxyqlzx
2011-05-01 · TA获得超过1057个赞
知道小有建树答主
回答量:734
采纳率:0%
帮助的人:621万
展开全部
乍看没什么问题。。是不是文件f、y还不存在?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式