我必须从二进制文件中写入/读取我创建的一些结构,但是当重新阅读它们时,我会遇到一些令人讨厌的错误。
以这种结构为例:
typedef struct items
{
char name[21], power[21];
int stock;
double price;
} ITEMS;
typedef struct shop
{
char name[21];
int numOfItems;
ITEMS *arr;
} SHOP;
现在,我可以创建一个SHOP数组并按原样填充所有内容(为每个SHOP [i]为ITEM创建动态数组),但我不确定是否:
的fwrite();实际上写了整个数组,包含为ITEM填写的所有信息 当我使用fread()时,它会给出一些访问冲突错误。
除了使用.txt文件进行I / O之外,什么是正确的方法。
以下是代码示例:http://pastebin.com/79TtvQ9t
答案 0 :(得分:0)
如果你想写结构,它不应该有指针领域。在这种情况下,你不应该按结构写。因为它只为指针字段写入地址
答案 1 :(得分:0)
问题是你正在编写指向文件的指针,它应该以这样的结尾
结束21个字符 - >来自struct shop的char数组“name”
4个字节 - >来自int numOfItems
4个字节 - >来自指向arr的指针
所以,你的结构应该变成这样的
typedef struct shop
{
char name[21];
int numOfItems;
ITEMS arr;
} SHOP;
会在文件
中结束与此相似的内容21个字符 - >来自struct shop的char数组“name”
4个字节 - >来自int numOfItems
21个字符 - >来自struct items
的char数组“name”21个字符 - >来自struct items
的char数组“power”4个字节 - >来自int stock
8个字节 - >来自双倍价格
字节可能会因您运行应用程序的PC而异(在某些PC中,int有2个字节,在其他PC中有4个等)。