Использование fread () для чтения двоичных данных по одной записи за раз - PullRequest
0 голосов
/ 08 сентября 2018

Это говорит, что поля записей хранятся с использованием типов, указанных в описании файла данных. Поля хранятся упакованными рядом друг с другом в файле данных. Вы не можете прочитать всю запись непосредственно в структуру 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

...