Chinaunix
标题:
求救,fopen的问题
[打印本页]
作者:
iamfog
时间:
2006-08-16 23:10
标题:
求救,fopen的问题
截取的相关的代码如下
FILE *fp;
if((fp=fopen("/home/tmp/a.txt","w+")) == NULL)
printf("open file error!\n");
......
复制代码
现在的问题如下
那个a.txt原本是不存在的,程序能正常在tmp下建立a.txt这个文件,且有读写的权限
但是a.txt写不进任何的数据,大小始终是为0。而且在程序的最后用fclose的话会导致
coredump
请问高手们这是怎么回事呢?实在是很郁闷
作者:
funnyt
时间:
2006-08-16 23:38
改用wb+
或者("//home//tmp//a.txt","wb+")) == NULL)
试试
作者:
luckyfeng_1126
时间:
2006-08-16 23:41
用r+好像也可以
作者:
iamfog
时间:
2006-08-16 23:57
谢谢楼上的朋友。
2楼的
我是unix系统 不区分那两种方式的
用‘//’这样的方法 没什么用吧 因为文件已经建好了 只是写不进去数据
好象是fopen返回给fp的值有问题 因为这个所以导致fclose的时候coredump
3楼的
r+和w+对我这个程序影响不大
作者:
isnowran
时间:
2006-08-17 00:02
都打开成功了,贴出来有什么用?写数据的代码呢?
作者:
flw2
时间:
2006-08-17 00:06
iamfog :
你的帖子对于问题解决没有什么价值.
作者:
iamfog
时间:
2006-08-17 13:56
给各位道歉了
没有经验 不懂得提问的方法 以后会想好再发帖问的
先谢谢楼上的朋友了。
因为fopen打开文件成功了,但fcose(fp)有问题,
以为fprintf的返回值不会影响到fp 所以没去检查fprintf的使用
经楼上的朋友们的提醒,去检查了下 发现是先面这行代码出了问题
a,b为字符数组,i,j为整数。
fprintf(fp,"%s%d%d\n",a,b,i,j);
复制代码
多了一个参数,导致fclose(fp)的时候coredump
但是为什么fprintf的返回值会影响到fp呢 导致fclose的失败?
为了验证 我写了如下的测试代码
虽然有警告 但是却能够正常的执行 fclose也没有导致coredump 而且数据也正常写入了文件
#include<stdio.h>
int main()
{
FILE *fp;
char a[10]="123456";
char b[5]="ttt";
int i = 1;
int j = 2;
int n = 0;
if((fp=fopen("/home/tmp/1.txt","w+"))==NULL)
{
printf("can't open file");
return -1;
}
n=fprintf(fp,"%s%d%d\n",a,b,i,j);
printf("%d\n",n);
fclose(fp);
return 0;
}
复制代码
我的机器是sco5.06 结果如下
n=16
1.txt的文件写入的内容为1234568043985681
搞不明白的是为什么前面那样写会导致fclose的coredump
后面的测试程序又可以通过呢
请高手指点迷津 谢谢。
作者:
foolfoolbird
时间:
2006-08-17 14:15
n=fprintf(fp,"%s%s%d%d\n",a,b,i,j);
复制代码
是不是要写成这样啊!
作者:
iamfog
时间:
2006-08-17 14:20
本来是只要写3个数据到文件中去 我写错了,多传了一个
结果导致了fclose(fp)时候的coredump
但是同样的测试程序却一点问题都没有 所以感觉很奇怪
而且fprintf的返回值怎么会影响到fp呢
作者:
scutlzp
时间:
2006-08-17 14:55
fprintf(fp,"%s%d%d\n",a,b,i,j);
第一个%s有问题,你传的是字符char类型,而%s需要一个char *类型啊,,char类型被转换成产char *了,
程序很可能就coredump了
作者:
酷酷长大了
时间:
2006-08-18 10:25
但是为什么fprintf的返回值会影响到fp呢 导致fclose的失败?
-------
并不是影响到,而是没执行到fclose。
少一个参数应该没影响的,应该是变量不能强制转换导致coredump吧!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2