c - 当我尝试从二进制文件中读取结构时,我得到(检测到堆栈粉碎)
问题描述
我使用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);
}
解决方案
在 fread 和 fwrite 中,我使用 3 作为结构中的元素数量,我错过的是 age 、 nom 和 prenom 都在同一个结构中pers
,所以我不得不在 fread 和 fwrite 中放入 1 ,所以我读取了结构中的数据一个变量,一切正常,没有错误。
虽然感谢您的回答。
推荐阅读
- javascript - 使用 joi 验证一个数组的长度与另一个数组的长度
- java - JTable 在选择后将 JComboBox 和 JCheckBox 恢复为值
- python - 将 1D 数组应用于 2D 数组的每个单元以创建 3D 数组
- html - 使用 text-center 属性在 ion-item 中对齐按钮不起作用
- php - Wink API v2 Hello World 在 PHP
- jpa - 控制器中的事务中止
- macos - 如何在 MacOS Mojave 上增加文件描述符的数量?
- angular - Angular Material Change Detection using ngOnChanges throwing error, "ExpressionChangedAfterItHasBeenCheckedError"
- amazon-dynamodb - DynamoDB 分页 - 知道什么时候没有更多结果
- html - 表单不从动态添加的字段中获取数据