在堆部分中声明结构时,读取不读取?我可以写入文件,但是当我尝试读取文件时,我遇到了段故障。我的代码在下面,请帮助我修复?

下面的第一段代码用于在文件中写入结构数据,该结构存储在堆部分中,第二段代码用于读取文件的包含内容

作家来源

/* 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/

10-17 02:10