C语言 当我试图从二进制文件读取结构时,我得到(检测到堆栈粉碎)



我使用fwrite()函数将数据存储在二进制文件中和fread()函数从二进制文件读取结构但是我得到

***检测到堆栈损坏***:终止Aborted (core dump)

这是我的代码:

#include <stdio.h>
# define N 3
typedef struct {
int age;
char nom[30];
char prenom[30];
}pers;
void remplir_bin_n(FILE *fi,int n) {
pers p;
int i;
for (i=0;i<n;i++){
printf("veillez entrez les information du personne n° %dn", i + 1);
printf("tAge: ");
scanf("%d", & p.age);
printf("tNom: ");
while ((getchar()) != 'n');
scanf("%[^n]", p.nom);
printf("tPrenom: ");
while ((getchar()) != 'n');
scanf("%[^n]", p.prenom);
fwrite(&p,3,sizeof(pers),fi);
}
fclose(fi);
}
void afficher_file_bin(FILE *f){
pers pi;
int i=1;
fread(&pi,3,sizeof(pers),f);
while(!feof(f)){
printf("Information du personne n° %dn", i );
printf("tL'age est : %dn",pi.age);
printf("tLe nom est : %sn",pi.nom);
printf("tLe prenom est : %sn",pi.prenom);
fread(&pi,3,sizeof(pers),f);
i++;
}
fclose(f);
}
void main (){
FILE *f,*fi;
f=fopen("pers.dat","rb");
fi=fopen("pers.dat","wb");
remplir_bin_n(fi,N);
afficher_file_bin(f);
}

在readad和fwrite中,我使用3作为结构中的元素数量,我错过的是年龄,nom和prenom都在同一个结构pers中,所以我必须在readad和fwrite中放入1,所以我在一个变量中读取结构数据,一切都工作得很好,没有错误。

尽管谢谢你的回答。

最新更新