首页 > 用户发贴区 > 编程问题提问区 > 关于文件读写函数的一个奇怪现象
2006
11-04

关于文件读写函数的一个奇怪现象

先看一段程序,其中myturboc是D盘中已经建立的目录,char2.txt是myturboc目录中已经建立的文件,
char2.txt中的内容是:asdfghjk
chat.txt是并不存在的文件
程序如下:
#include<stdio.h>
void my_copy(char *fname1,char *fname2)
{
 FILE *fp1,*fp2;
 if((fp1=fopen(fname1,”r”))==NULL)
 {
  printf(“file can not open!\n”);
  exit(0);
 }
 if((fp2=fopen(fname2,”w”))==NULL)
 {
  printf(“file can not open!\n”);
  exit(0);
 }
 while(!feof(fp1))
  fputc(fgetc(fp1),fp2);
 fclose(fp1);
 fclose(fp2);
}
main()
{
    my_copy(“d:\\myturboc\\char2.txt”,”d:\\chat.txt”); 
}
问题:
程序执行后chat.txt的内容并不是预想中的asdfghjk而是asdfghjky(最后一个字符是y的头上加两点,这个字符在网页上无法显示只好用y代替)
这是为什么,y的头上加两点是什么字符,该不是文件结束标记吧。
有哪位朋友知道请不吝赐教,我在这里先谢谢了。


关于文件读写函数的一个奇怪现象》有 1 条评论

  1. VC爱好者 说:

    while(!feof(fp1))
      fputc(fgetc(fp1),fp2);

    这个循环就向 fp2 写了一个字节. 然后退出循环. 但是写的这个字节不是你想要的,结果就变成y的头上加两点的那种样子

    解决方法如下
    unsigned char cstr=fgetc(fp1);
    while(!feof(fp1))
    {
    fputc(cstr,fp2);
    cstr=fgetc(fp1);
    }

留下一个回复