先看一段程序,其中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的头上加两点是什么字符,该不是文件结束标记吧。
有哪位朋友知道请不吝赐教,我在这里先谢谢了。
>> 本文固定链接: http://www.vcgood.com/archives/1258
while(!feof(fp1))
fputc(fgetc(fp1),fp2);
这个循环就向 fp2 写了一个字节. 然后退出循环. 但是写的这个字节不是你想要的,结果就变成y的头上加两点的那种样子
解决方法如下
unsigned char cstr=fgetc(fp1);
while(!feof(fp1))
{
fputc(cstr,fp2);
cstr=fgetc(fp1);
}