У меня возникли некоторые проблемы при попытке прочитать двоичный файл на C. Эта проблема никогда не случалась со мной раньше, я не знаю, как с этим справиться.
Итак, есть эта структура, которая называется«hash_record», многие из них хранятся в моем файле «HASH_FILE» в двоичном режиме.Это структура:
typedef struct hash_record {
char *hash;
char *filename;
} hash_record;
Я пишу файл следующим образом:
hash_record hrec;
[...] code that fill the structure's fields [...]
FILE* hash_file = fopen(HASH_FILE, "ab");
fwrite(&hrec, sizeof(hash_record), 1, hash_file);
fclose(shared_file);
Это просто резюме, функция fwrite () находится внутри цикла, так что я могузаполните файл многими хэш-записями.Затем, сразу после этого куска кода, я начинаю читать файл и распечатывать некоторые данные, чтобы убедиться, что все прошло хорошо.Это код:
int print_data() {
hash_record rec;
printf("Data:\n");
FILE* hash_file = fopen("hash.bin", "rb");
if (hash_file == NULL)
return -1;
while(fread(&rec, sizeof(hash_record), 1, hash_file) == 1)
printf("Filename: %s - Hash: %s", rec.filename, rec.hash);
fclose(hash_file);
return 0;
}
И все работает просто отлично!Проблема заключается в том, что если я записываю двоичный файл в экземпляр моей программы и затем завершаю его, когда я снова открываю его (комментируя код, который записывает файл, чтобы он мог только читать его), это вызывает ошибку сегментации.Эта ошибка появляется, когда я вызываю printf () внутри цикла while ().Если я просто печатаю обычную строку без вызова «rec», ошибки не выдаются, поэтому я предполагаю, что что-то неправильно хранит данные внутри «rec».
Есть идеи?
Спасибо!