C语言读写TXT文件问题

#include<stdio.h>
#include<stdlib.h>

void main ()
{
FILE *file1,*file2;
char ch[100],k;
int n=0,i=0,j=0;
if((file1=fopen("source.txt","r"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
while(! feof(file1))
{
ch[n]=fgetc(file1);
n++;
}

if((file2=fopen("destinat.txt","a"))==NULL)
{
printf("cannot open file\n");
exit(0);
}
for(i=0;i<n;i++)
{

fputc(ch[i],file2);

}
fclose(file1);
fclose(file2);
}
运行后,Destinat.txt中最后多了一个“y上面两个点”的乱码,复制粘贴到百度是一个空格,何解?
能顺便介绍下TXT格式更好,谢谢了
环境是XP,TC3.0

你好,一楼解释的字符串结束符'\0'只是针对内存中C风格字符串。而对磁盘文件或者文件流来说是不适用的。

出现“y上面两个点”的乱码的原因在于fopen()函数以及fgetc()函数上,在读取文件流上,末尾会读出一个值为-1的字符变量,正是由于这个怪异的值,才出现了那个乱码。

我测试过了,读入-1跟文本文件的编码无关,我测试过ANSI和UNICODE编码的文本文件,均为读入这个值为-1的结束符。

所以,为了避免这个情况,再输出字符时,去掉该结束字符吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-08
这代码的原理就是从source文件、拷贝内容到destinat文件(append) 。。。。。所以 内容要看源文件是怎样的
~~~~~~~~~
~~~~~~~~~~~~~~~~~
第2个回答  2010-10-10
这个问题很容易解决。因为字符数组的最后一位自动有一个结束符'\0',因此在输入到file2中出现问题,如果你在for(i=0;i<n;i++)
{

fputc(ch[i],file2);

}
中讲条件改为n-1,就不会将这个结束符输入。在vc6上测试是可行的。
相似回答