中易网

求大神帮看看为什么总是出现segmentation fault

答案:2  悬赏:20  
解决时间 2021-03-21 09:31
#include
#include
#include
#include
#include
#include
#include
#define BUFSIZE 200
#define oops(msn) { perror(msn);exit(1);}
int main()
{
int fd,len,j,k,i;
char buf[BUFSIZE];
char buff[BUFSIZE];
char *p,*fp;

fd=open("w.c",(O_CREAT|O_WRONLY|O_TRUNC),(S_IRWXU|S_IRWXG));
if (fd== -1)
oops("open");
strcpy(buf,"hello world1234567890");
len=strlen(buf);
j=write(fd,buf,len);
if(j == -1)
oops("write");
fp=fopen("w.c","a");
if((k=fread(buff,1,1,fp))== -1)
oops("read");
printf("%s\n",buff);
fclose(fd);
return 0;
}

把fread(buff,1,1fp)换成read(fd,buff,1)后总是出现bad file descriptor
最佳答案
fp=fopen("w.c","a");

执行此句之后要测试fp是否打开成功。前面fd未关闭,此处再请求写权限,应该是打开失败的,所以fread出现内存访问异常,则提示segmentation fault。

由于fd打开的时候只请求了写权限,调用读函数时会失败,所以会给出提示bad file descriptor。
全部回答
修改后源程序如下: #include<stdio.h> float fac (int n) { if (n==0||n==1) return 1; else  return n*fac(n-1);  }  void main ()  {   int i,n;  float s=1.0;  printf("亲,请问你想求前几位数的阶乘倒数之和?\n");  scanf("%d",&n);  for(i=1;i<=n;i++)  s+=1/fac(i);  printf("%f\n",s);   }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
买了一套迪奥旅行套化妆品,全英文,不知道都
重庆江北观音桥哪里有卖仓鼠用品的吗
弟子规的第二句是哪句
什么是红檀
手机故障,每隔半年就坏一次,三次了,每次都
(莫之奈何)标准解释~?
怀素堂土瓜根粉是什么,在哪能买到
招展函什么意思?
我想做卖茶叶的小生意请问怎么入手
管子直线度和圆弧度一个意思吗?
CF还值得大家花钱吗
教孩子适合看什么书呀
指甲整个掉下来后还会不会再长出来
菜市场可以开水果店?
什么叫橡胶磁铁
推荐资讯
哪些学校在艺术招生考试里有学前教育专业的?
不退税了,还需要在出口退税申报系统里做吗
六个多月的宝宝可以吃馒头蘸菜汤吗
如何挑选阳光板 技巧有哪些
新抓的小猫怕人怎么办
初一语文上册生字表,急··谢谢
谁用的鸿瑞易拉罐粉碎机,金属粉碎机多少钱一
含雨诗句
烦闷的反义词可以是欢乐吗?
请问澳门哪里有sweetmay?澳门sweetmay里有悦
广州-牙齿缝隙大怎么办?高分跪求
这是哪个动漫里的?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?