读书人

求教-关于fgets得到乱码的有关问题

发布时间: 2013-10-27 15:21:49 作者: rapoo

求教----关于fgets得到乱码的问题

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


void main()
{
FILE *fp1,*fp2;
char filename1[30],filename2[30];
char buff1[50],buff2[50],buff3[50],ch;

printf("请输入文本1的路径:");
scanf("%s",filename1);

printf("请输入文本2的路径:");
scanf("%s",filename2);

if((fp1=fopen(filename1,"w+"))==NULL)
{
printf("创建文本失败!\n");
getchar();
exit(0);
}

if((fp2=fopen(filename2,"w+"))==NULL)
{
printf("创建文本失败!\n");
getchar();
exit(0);
}
fflush(stdin);
printf("请向文件1输入信息:");
gets(buff1);
fputs(buff1,fp1);

printf("请想文件2输入信息:");
gets(buff2);
fputs(buff2,fp2);

printf("现在把文本2的内容复制到文本1的内容!\n");

fseek(fp1,0L,2);

while((ch=fgetc(fp2))!=EOF)
{
fputc(ch,fp1);
}

fclose(fp1);
fclose(fp2);
}


然后查看文本1,后面追加的都是乱码。求教!
[解决办法]
原因应该是写入文件1的内容仍然在内存中,而且目前是以写方式打开文件1,所以对它的读取不成功。
可能的解决方式1:
在语句:
fseek(fp1,0L,2);
加入:
fclose(fp1);
fp1 = fopen(filename1, 'r');
[解决办法]
一个以追加方式打开, 第二个以读和追加方式打开。

fopen(filename,“a”)
fopen(filename,“ra”)
[解决办法]
printf("现在把文本2的内容复制到文本1的内容!\n");

fclose(fp1);
fclose(fp2);
//fseek(fp1,0L,2);

fp1=fopen(filename1,"a+")
fp2=fopen(filename2,"r")
while((ch=fgetc(fp2))!=EOF)
{
fputc(ch,fp1);
}
[解决办法]
fseek只是一个文件定位指针,如果你任意添加 ,后面的字符就会被覆盖
[解决办法]
fp1本就在末尾写,你要刷的是fp2...

//fseek(fp1,0L,2);
rewind(fp2);

或者:
fflush(fp2);
fseek(fp2, 0, 0);

读书人网 >C语言

热点推荐