免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 4656 | 回复: 32
打印 上一主题 下一主题

在看APUE时,做了一个例子,不懂出现问题原因! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-10 14:36 |只看该作者 |倒序浏览
代码:
int main()
{
   FILE *fp;
   char buf[20];
   
   if((fp=fopen("test.txt","a+"))==NULL)
   {
      printf("open test.txt error\n");
      exit(-1);
   }
   
   fseek(fp,0,SEEK_SET);
   memset(buf,0,sizeof(buf));
   fread(buf,5,1,fp);
   printf("buf = %s\n",buf);
   
   memset(buf,0,sizeof(buf));
   strcpy(buf,"this is a test");
   printf("buf 2 = %s\n",buf);
   fprintf(fp,"%s\n",buf);
   
   
   fclose(fp);
   
   exit(0);
}
几点说明:
1。文件test.txt在程序执行前已经存在,内容是:123456789。(只有这一行数据)
2。执行程序后,再看文件的内容。内容是:
   123456789
    12345this is a test
3。调用fseek和fread的目的纯粹是为了随意的移动文件内容指针。

问题:为什么写到文件中的内容是12345this is a test,而不是this is a test
问题出现在哪儿?

论坛徽章:
0
2 [报告]
发表于 2006-10-10 14:43 |只看该作者
a+


打开方式,追加方式

论坛徽章:
0
3 [报告]
发表于 2006-10-10 14:43 |只看该作者
你fprintf之前执行过,fread(buf,5,1,fp);
这个时候的文件指针为: 5(指向第6个字符)

如果你要从头覆盖,你在 fprintf之前 rewind(fp);把文件指针移动到文件头

论坛徽章:
0
4 [报告]
发表于 2006-10-10 14:44 |只看该作者
没,我看错了

论坛徽章:
0
5 [报告]
发表于 2006-10-10 14:45 |只看该作者
我知道怎么解决这个问题,但是我不知道为什么会出现结果的原因。谢谢

论坛徽章:
0
6 [报告]
发表于 2006-10-10 14:47 |只看该作者
楼主的没错阿

论坛徽章:
0
7 [报告]
发表于 2006-10-10 14:49 |只看该作者
我认为执行后文件的内容是:
123456789
this is a test
而不是:
123456789
12345this is a test

论坛徽章:
0
8 [报告]
发表于 2006-10-10 14:51 |只看该作者
for  wuqing
在追加方式打开的时候,不会出现覆盖问题。

论坛徽章:
0
9 [报告]
发表于 2006-10-10 14:51 |只看该作者
是的,我看也没错,看看你的程序是不是把strcpy写成strcat了

论坛徽章:
0
10 [报告]
发表于 2006-10-10 14:53 |只看该作者
我的视力是1.0
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP