C语言读写TXT文件问题

#include<stdio.h>#include<stdlib.h>voidmain(){FILE*file1,*file2;charch[100],k;intn=0,... #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
展开
 我来答
司琅0Iid5b
2010-10-11 · TA获得超过802个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:658万
展开全部
你好,一楼解释的字符串结束符'\0'只是针对内存中C风格字符串。而对磁盘文件或者文件流来说是不适用的。

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

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

所以,为了避免这个情况,再输出字符时,去掉该结束字符吧。
匿名用户
2017-11-08
展开全部
这代码的原理就是从source文件、拷贝内容到destinat文件(append) 。。。。。所以 内容要看源文件是怎样的
~~~~~~~~~
~~~~~~~~~~~~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuyshizhe
2010-10-10
知道答主
回答量:10
采纳率:0%
帮助的人:10.2万
展开全部
这个问题很容易解决。因为字符数组的最后一位自动有一个结束符'\0',因此在输入到file2中出现问题,如果你在for(i=0;i<n;i++)
{

fputc(ch[i],file2);

}
中讲条件改为n-1,就不会将这个结束符输入。在vc6上测试是可行的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式