簡體   English   中英

當我嘗試從二進制文件中讀取結構時,我得到(檢測到堆棧粉碎)

[英]When I try to read structure from binary file I get (stack smashing detected)

我使用fwrite() function 和fread() function 將數據存儲在二進制文件中以從二進制文件中讀取結構,但我得到了

***檢測到堆棧粉碎***:終止中止(核心轉儲)

這是我的代碼:

#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);
}

在 fread 和 fwrite 中,我使用 3 作為結構中的元素數量,我錯過的是年齡、nom 和pers都在同一個結構中,所以我不得不在 fread 和 fwrite 中放入 1,所以我讀取了結構數據在一個變量中,一切正常,沒有錯誤。

雖然感謝您的回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM