我一直致力于一系列涉及结构,读取和写入bin文件的任务。
结构定义是:
struct Data{
unsigned int a;
unsigned short b;
short c;
char d[8];
short e;
int f;
int g;
short h;
char i;
char j;
unsigned long k;
char l;
double m;
float n;
int o;
char p;
double q;
}
我的阅读和打印程序似乎工作正常,代码是:
int main (int argc, char **argv){
// Check correct number of args
FILE *record = fopen(argv[1], "r")
// More Prelim checks
struct Data entry;
/* if first field exists, task assumption is that all other fields
* must also exist with the proper sizes.
*/
while(fread(&entry.a, sizeof entry.a, 1, record) > 0){
fread(&entry.b, sizeof entry.b, 1, record);
// ... read all fields one by one
fread(&entry.q, sizeof entry.q, 1, record);
printf("%u, %d, %d, %s, %d, %d, %d, %d, %c, %lu, %hhx, %f, %f, %d, %d, %f",
entry.a, entry.b, entry.c . . . entry.q);
}
}
这会打印输入bin文件而不会出错(对15个文件自动测试,有些条目有数十个)。最简单的一个,只是一个条目,是
但是,当我尝试存储所有数据以便对它们进行排序时,使用以下数组,数据正确启动,但就我所见,它完全变得混乱:
struct Data *entries = NULL;
int curEntries = 100;
int counter = 1;
entries = (struct Data *) malloc(curEntries * sizeof(struct Data));
while(fread(&entries[counter - 1].a, sizeof entries[counter - 1].a, 1, record) >0){
/* Same reading, storing and printing as above, then increment counter */
}
由于读取和打印部分完全相同,除了使用“计数器”变量之外,我的问题是这里与数组内存有关,我需要修复什么?
答案 0 :(得分:-1)
编辑:已解决。 实现是正确的,但许多关于格式和 使用变量非常有帮助。 问题是我必须编写代码的格式不同。