免费注册 查看新帖 |

Chinaunix

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

求救,fopen的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-16 23:10 |只看该作者 |倒序浏览
截取的相关的代码如下

  1. FILE *fp;

  2. if((fp=fopen("/home/tmp/a.txt","w+")) == NULL)
  3.      printf("open file error!\n");
  4. ......
复制代码


现在的问题如下
那个a.txt原本是不存在的,程序能正常在tmp下建立a.txt这个文件,且有读写的权限
但是a.txt写不进任何的数据,大小始终是为0。而且在程序的最后用fclose的话会导致
coredump

请问高手们这是怎么回事呢?实在是很郁闷

论坛徽章:
0
2 [报告]
发表于 2006-08-16 23:38 |只看该作者
改用wb+
或者("//home//tmp//a.txt","wb+")) == NULL)
试试

论坛徽章:
0
3 [报告]
发表于 2006-08-16 23:41 |只看该作者
用r+好像也可以

论坛徽章:
0
4 [报告]
发表于 2006-08-16 23:57 |只看该作者
谢谢楼上的朋友。
2楼的
我是unix系统 不区分那两种方式的
用‘//’这样的方法 没什么用吧 因为文件已经建好了 只是写不进去数据
好象是fopen返回给fp的值有问题 因为这个所以导致fclose的时候coredump

3楼的
r+和w+对我这个程序影响不大

论坛徽章:
0
5 [报告]
发表于 2006-08-17 00:02 |只看该作者
都打开成功了,贴出来有什么用?写数据的代码呢?

论坛徽章:
0
6 [报告]
发表于 2006-08-17 00:06 |只看该作者
iamfog :

你的帖子对于问题解决没有什么价值.

论坛徽章:
0
7 [报告]
发表于 2006-08-17 13:56 |只看该作者
给各位道歉了
没有经验 不懂得提问的方法 以后会想好再发帖问的
先谢谢楼上的朋友了。

因为fopen打开文件成功了,但fcose(fp)有问题,
以为fprintf的返回值不会影响到fp 所以没去检查fprintf的使用
经楼上的朋友们的提醒,去检查了下 发现是先面这行代码出了问题
a,b为字符数组,i,j为整数。
  1. fprintf(fp,"%s%d%d\n",a,b,i,j);
复制代码

多了一个参数,导致fclose(fp)的时候coredump
但是为什么fprintf的返回值会影响到fp呢 导致fclose的失败?

为了验证 我写了如下的测试代码
虽然有警告 但是却能够正常的执行 fclose也没有导致coredump 而且数据也正常写入了文件

  1. #include<stdio.h>

  2. int main()
  3. {
  4.     FILE *fp;
  5.    
  6.     char a[10]="123456";
  7.     char b[5]="ttt";

  8.     int i = 1;
  9.     int j = 2;

  10.     int n = 0;

  11.     if((fp=fopen("/home/tmp/1.txt","w+"))==NULL)
  12.     {
  13.           printf("can't open file");
  14.           return -1;
  15.      }

  16.      n=fprintf(fp,"%s%d%d\n",a,b,i,j);
  17.      printf("%d\n",n);

  18.      fclose(fp);
  19.      return 0;
  20. }
复制代码


我的机器是sco5.06  结果如下
n=16
1.txt的文件写入的内容为1234568043985681

搞不明白的是为什么前面那样写会导致fclose的coredump
后面的测试程序又可以通过呢

请高手指点迷津 谢谢。

论坛徽章:
0
8 [报告]
发表于 2006-08-17 14:15 |只看该作者
  1. n=fprintf(fp,"%s%s%d%d\n",a,b,i,j);
复制代码

是不是要写成这样啊!

论坛徽章:
0
9 [报告]
发表于 2006-08-17 14:20 |只看该作者
本来是只要写3个数据到文件中去 我写错了,多传了一个
结果导致了fclose(fp)时候的coredump

但是同样的测试程序却一点问题都没有 所以感觉很奇怪
而且fprintf的返回值怎么会影响到fp呢

论坛徽章:
0
10 [报告]
发表于 2006-08-17 14:55 |只看该作者
fprintf(fp,"%s%d%d\n",a,b,i,j);

第一个%s有问题,你传的是字符char类型,而%s需要一个char *类型啊,,char类型被转换成产char *了,
程序很可能就coredump了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP