在堆部分中声明结构时,读取不读取?我可以写入文件,但是当我尝试读取文件时,我遇到了段故障。我的代码在下面,请帮助我修复?
下面的第一段代码用于在文件中写入结构数据,该结构存储在堆部分中,第二段代码用于读取文件的包含内容
作家来源
/* writing in file this code is good*/
#include<stdio.h>
#include<stdlib.h>
struct st
{
int roll;
char name[11];
float marks;
};
int main()
{
int i;
struct st *var;
var=malloc(sizeof(struct st) *5) ;
FILE *fp;
fp=fopen("ha","w");
for(i=0;i<5;i++)
{
printf("enter roll\n");
scanf("%d",&var[i].roll);
printf("enter name\n");
scanf("%s",var[i].name);
printf("enter marks\n");
scanf("%f",&var[i].marks);
}
fwrite(&var,sizeof(struct st),1,fp);
fclose(fp);
}
读码器
#include<stdio.h>
#include<stdlib.h>
struct st
{
int roll;
char name[11];
float marks;
};
int main()
{
int i;
struct st *var1;
var1=malloc(sizeof(struct st)*5);
FILE *fp;
fp=fopen("ha","r");
fread(&var1,sizeof(struct st),1,fp);
for(i=0;i<5;i++) // I M GETTING SEGMENTATION FAULT?
{
printf("%d\n",var1[i].roll);
printf("%s\n",var1[i].name);
printf("%f\n",var1[i].marks);
}
}
最佳答案
您只为一个struct st
分配了空间,但是尝试访问其中的5个。
要分配5,请执行var = malloc(5 * sizeof *var);
另外,您打开文件5次,循环后应该出现fp=fopen("hai","w");
行。 (并且您应该检查它是否成功)。
关于c - 在堆部分中声明结构时,读取不读取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25541572/