如何解决读取Bin文件的结构数组出现内存错误
im试图读取input.txt文件,该文件是bin文件。除了在读取文件时即时读取在循环中读取的内容(将数据复制到结构中)的事实外,它还可以工作。如果我没有在循环内打印数据,并且在完成循环后(未修改结构)在另一个函数中打印数据,我会收到一个错误,即之前打印的某些数据变得不同。 我正在阅读我的文件,那里有一个注册号,一个人的姓名,月份,年份,工资。
Matr Nome MM AA Stipendio
300 Maria 9 1999 1050
301 Luigi 5 2000 1200
309 Marco 8 2000 1220
306 Marta 7 1998 1100
306 Marta 7 1998 1100
300 Maria 9 2001 0
0 Luigi 5 2000 1200
309 Marco 8 2000 1220
306 Marta 7 1998 1100
309 Marco 1220
306 Marta 1342
那是我在说什么的一个例子。
这是文件:https://www.dropbox.com/s/89s0kw13jf0fpr5/input.txt?dl=0
这是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct n{
int mat;
char nome[20];
int mese;
int anno;
int stip;
}Dipendente;
typedef Dipendente *dip;
void readfile(dip h,int dim);
void printStip(dip h,int dim);
void increasestip(dip h,int dim);
int main(){
int dim = 4;
dip h = NULL;
h= malloc(sizeof(h)*dim);
readfile(h,dim);
increasestip(h,dim);
printStip(h,dim);
return 0;
}
//printing people with more than cetain wage
void printStip(dip h,int dim){
int i;
for(i = 0 ; i < dim; i++){
if(h[i].stip >1200){
printf("%d\t%s\t%d\n",h[i].mat,h[i].nome,h[i].stip);
}
}
}
// increasing wage if hired before a certain date.
void increasestip(Dipendente *h,int dim){
int i ;
for(i = 0 ; i < dim ; i++){
// thats where data printed are messed up
printf("%d\t%s\t%d\t%d\t%d\n",h[i].mese,h[i].anno,h[i].stip);
if(h[i].anno < 2000){
h[i].stip +=(h[i].stip*0.22);
}
else if(h[i].anno == 2000 && h[i].mese < 5){
h[i].stip +=(h[i].stip*0.22);
}
}
}
//reading file function
void readfile(dip h,int dim){
FILE *fptr = NULL;
if((fptr = fopen("input.txt","rb"))==NULL){
printf("Errore nell\'apertura del file\n");
exit(0);
}
else{
int i =0;
int nbytes;
Dipendente t= {0,{0},0};
printf("Matr\tNome\tMM\tAA\tStipendio\n");
while(!feof(fptr)){
fread(&t,sizeof(t),1,fptr);
strncpy(h[i].nome,t.nome,strlen(t.nome)+1);
h[i].mat = t.mat;
h[i].mese = t.mese;
h[i].anno = t.anno;
h[i].stip = t.stip;
// thats where i get proper print
printf("%d\t%s\t%d\t%d\t%d\n",h[i].stip);
i++;
}
}
}
我是使用Dropbox链接文件的新手,所以如果链接无效,请告诉我。 关于读取bin文件,这也是我的新手,但它似乎可以工作,fread似乎可以很好地工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。