在堆部分中声明结构时,fread不读取?我能够写入文件,但当我尝试读取文件时,我得到分段错误。我的代码如下,请帮我解决?
下面的第一个代码用于在文件中编写结构数据,这个结构存储在堆部分中,第二个代码用于读取文件的包含
作家来源
/* 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);
}
}
答案 0 :(得分:0)
您只为一个struct st
分配了空间,但您尝试访问其中的一个。
要分配5,请执行var = malloc(5 * sizeof *var);
此外,您打开文件5次,fp=fopen("hai","w");
行应该在循环之后。 (你应该检查它是否成功)。
答案 1 :(得分:0)
试试这个:
if(fp == NULL)
{
return 1;
}