尝试在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()函数在循环中,这样我就可以用很多hash_record来填充文件。 然后,在那段代码之后,我开始阅读文件并打印一些数据,以确保一切顺利。这是代码:
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;
}
一切正常! 问题是,如果我在我的程序实例中编写二进制文件然后退出它,当我再次打开它时(注释编写文件的代码以便它只能读取它)它会给我一个分段错误。当我在while()循环中调用printf()时出现此错误。如果我只打印一个没有调用“rec”的公共字符串而没有给出错误,那么我假设在“rec”中存储数据有问题。
有什么想法吗?
谢谢!
答案 0 :(得分:4)
你正在写出指针。当您从同一个程序实例中读回它们时,数据位于同一位置且指针有意义。如果你从另一个实例读取它们,指针就不好了。