
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 展开
#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 展开
3个回答
展开全部
你好,一楼解释的字符串结束符'\0'只是针对内存中C风格字符串。而对磁盘文件或者文件流来说是不适用的。
出现“y上面两个点”的乱码的原因在于fopen()函数以及fgetc()函数上,在读取文件流上,末尾会读出一个值为-1的字符变量,正是由于这个怪异的值,才出现了那个乱码。
我测试过了,读入-1跟文本文件的编码无关,我测试过ANSI和UNICODE编码的文本文件,均为读入这个值为-1的结束符。
所以,为了避免这个情况,再输出字符时,去掉该结束字符吧。
出现“y上面两个点”的乱码的原因在于fopen()函数以及fgetc()函数上,在读取文件流上,末尾会读出一个值为-1的字符变量,正是由于这个怪异的值,才出现了那个乱码。
我测试过了,读入-1跟文本文件的编码无关,我测试过ANSI和UNICODE编码的文本文件,均为读入这个值为-1的结束符。
所以,为了避免这个情况,再输出字符时,去掉该结束字符吧。
2017-11-08
展开全部
这代码的原理就是从source文件、拷贝内容到destinat文件(append) 。。。。。所以 内容要看源文件是怎样的
~~~~~~~~~
~~~~~~~~~~~~~~~~~
~~~~~~~~~
~~~~~~~~~~~~~~~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题很容易解决。因为字符数组的最后一位自动有一个结束符'\0',因此在输入到file2中出现问题,如果你在for(i=0;i<n;i++)
{
fputc(ch[i],file2);
}
中讲条件改为n-1,就不会将这个结束符输入。在vc6上测试是可行的。
{
fputc(ch[i],file2);
}
中讲条件改为n-1,就不会将这个结束符输入。在vc6上测试是可行的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询