首页 > 解决方案 > 当我尝试从二进制文件中读取结构时,我得到(检测到堆栈粉碎)

问题描述

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

***检测到堆栈粉碎***:终止中止(核心转储)

这是我的代码:

#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° %d\n", 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° %d\n", i );
        printf("\tL'age est : %d\n",pi.age);
        printf("\tLe nom est : %s\n",pi.nom);
        printf("\tLe prenom est : %s\n",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);
}

标签: cstructurebinaryfilesfwrite

解决方案


在 fread 和 fwrite 中,我使用 3 作为结构中的元素数量,我错过的是 age 、 nom 和 prenom 都在同一个结构中pers,所以我不得不在 fread 和 fwrite 中放入 1 ,所以我读取了结构中的数据一个变量,一切正常,没有错误。

虽然感谢您的回答。


推荐阅读