在堆部分中声明结构时,Fread不读取?

时间:2014-08-28 05:48:54

标签: c file fwrite fread

在堆部分中声明结构时,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);
    }
}

2 个答案:

答案 0 :(得分:0)

您只为一个struct st分配了空间,但您尝试访问其中的一个。

要分配5,请执行var = malloc(5 * sizeof *var);

此外,您打开文件5次,fp=fopen("hai","w");行应该在循环之后。 (你应该检查它是否成功)。

答案 1 :(得分:0)

试试这个:

if(fp == NULL)
{
    return 1;
}