从二进制文件中写入和读取包含其他结构的结构(C)

时间:2016-04-13 19:46:24

标签: c arrays struct

我必须从二进制文件中写入/读取我创建的一些结构,但是当重新阅读它们时,我会遇到一些令人讨厌的错误。

以这种结构为例:

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

2 个答案:

答案 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个等)。