使用fread()一次读取一个记录的二进制数据

时间:2018-09-08 14:28:47

标签: c struct fread

说记录的字段是使用数据文件描述中指定的类型存储的。这些字段彼此紧紧地存储在数据文件中。您无法在一次调用中将整个记录直接读取到C结构中,因为C在结构的某些字段之间插入了额外的未使用空间(这称为对齐填充。

您必须一次读取一个字段的数据记录。建议使用fread读取每个字段。

我的代码读取各种数据类型的结构记录。文件名是f1。

我尝试了2种方法

第一种方法:

fread(&rec1, sizeof(struct record), 1, f1);

第二种方法:

fread(&rec1.tin, sizeof(struct record), 1, f1);
printf("%hhu, ", rec1.tin);
fread(%rec1.love, sizeof(struct record), 1, f1);
printf("%s, ", rec1.love);
fread(&rec1.curve, sizeof(struct record), 1, f1);
printf("%d, ", rec1.curve);
fread(&rec1.history, sizeof(struct record), 1, f1);
printf("%lu, ", rec1.history);
fread(&rec1.ground, sizeof(struct record), 1, f1);
printf("%u, ", rec1.ground);
fread(&rec1.week, sizeof(struct record), 1, f1);
... and so on

当测试文件返回时,以上都不对我有用

**** Automarker: fread must read each struct field separately

****输出被忽略。您的程序退出,错误代码:202

0 个答案:

没有答案