求大神帮看看为什么总是出现segmentation fault
答案:2 悬赏:20
解决时间 2021-03-21 09:31
- 提问者网友:温柔又任性
- 2021-03-20 21:10
#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
最佳答案
- 二级知识专家网友:桃花别处起长歌
- 2021-03-20 21:16
fp=fopen("w.c","a");
执行此句之后要测试fp是否打开成功。前面fd未关闭,此处再请求写权限,应该是打开失败的,所以fread出现内存访问异常,则提示segmentation fault。
由于fd打开的时候只请求了写权限,调用读函数时会失败,所以会给出提示bad file descriptor。
全部回答
- 1楼网友:恕我颓废
- 2021-03-20 22:04
修改后源程序如下:
#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);
}
我要举报
大家都在看
推荐资讯