當堆結構在堆段中聲明時,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);
}
}
的fread(VAR1,的sizeof(結構ST),1,fp的);這裏var1已經是一個指針了。不要使用&在這裏。並且在循環中讀取每個結構,您只會讀取第一個項目。 – 2014-08-28 06:19:22