关于文件读写复制操作的问题

alang512 2011-03-29 10:16:53
刚才写了个程序:从磁盘里指定的txt文件,复制全部内容到另外一个新文件,
为什么复制完成之后,在 新文件 最后尾 多了一个字符 y , 这个字符 y头顶上有 两个点。
while (!feof(fp))
{
ch = fgetc(fp);

fputc(ch, fpcopy);
}

个人认为:复制结束之后,还继续输出字符到 新文件。

请各位高手 指点下,谢谢了。
...全文
75 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-03-29
  • 打赏
  • 举报
回复
system("copy 文件1 文件2");
alang512 2011-03-29
  • 打赏
  • 举报
回复
谢谢 楼上了。解决了。
delphiwcdj 2011-03-29
  • 打赏
  • 举报
回复
while (!feof(in))
{
ch=fgetc(in);
if (feof(in)) break;
fputc(ch,out);
}
delphiwcdj 2011-03-29
  • 打赏
  • 举报
回复
参考这个

#include <cstdio>
#include <cstdlib>

int main(int argc, char *argv[])
{
FILE *in,*out;
char ch;
if ((in=fopen("test1.txt","rb"))==NULL)
{
printf("\n打开文件test1.txt出错!\n");
exit (0);
}
if ((out=fopen("test2.txt","wb"))==NULL)
{
printf("\n打开文件出错!\n");
exit (0);
}
while (!feof(in))
{
ch=fgetc(in);
if (feof(in)) break;
fputc(ch,out);
}
fclose(in);
fclose(out);
return 0;
}

lx3275852 2011-03-29
  • 打赏
  • 举报
回复
逻辑有问题。。。。
while之前,先成功读取一个字符,然后while中
先fputc(ch, fpcopy);
再ch = fgetc(fp);


因为你在while中判断!feof(fp)
那么,读取最后一个字符的时候,!feof(fp) 为真,
于是执行ch = fgetc(fp); 结果读取失败,ch会被赋值成-1
接着fputc(ch, fpcopy); 把-1写进文件中,

难道你不认为这有问题么?
bdmh 2011-03-29
  • 打赏
  • 举报
回复
参考下面链接中从文件读取链表的代码
http://blog.csdn.net/bdmh/archive/2011/01/02/6112631.aspx
bdmh 2011-03-29
  • 打赏
  • 举报
回复
当到文件 最后时,feof并不知道已经到末尾了,它需要再向后读取一个字节,才能确定已经到末尾了,这是就读到了一个乱码字符,你应该提前读一下,如果不是再返回一个字符的位置

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧