二进制文件中的结构数组

时间:2015-08-29 11:29:21

标签: c arrays structure binaryfiles

我必须编写一个函数,它将使用二进制文件中的数据读取类型为Product的结构数组。此文件包含产品数量 - nr和许多类型的文章Product。怎么了?提前谢谢!

#define SIZE 30

typedef struc{
    int id;
    char[SIZE] name;
    float price;
}Product;

void create(Product *p, FILE *fptr)
{
    p = malloc(sizeof(Product));
    fread(p, 1, sizeof(Product), fptr);
}

int main(int argc, char* argv[])
{
    FILE *fptr = fopen(argv[1],"rb");
    Product *p;
    create(p, fptr);

    return 0;
}

1 个答案:

答案 0 :(得分:0)

您必须将其修改为以下内容:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 30

typedef struct{
    int id;
    char name[SIZE];
    float price;
}Product;

int readproducts(Product *p, FILE *fptr, int nr)
{    
    if(nr != fread(p, sizeof(Product), nr, fptr))
      return -1;

    return 0;
}

int main(int argc, char* argv[])
{
    FILE *fptr = fopen(argv[1],"rb");
    int nr = 0;
    if(NULL == fptr) return -1;

    // First read number of products from file
    // Assuming this number is written as 4 byte integer - at the start of file
    if(fread(&nr, 4, 1, fptr) != 1)
       return -1;

    // Now, read the products
    Product *p = malloc(nr * sizeof(Product));
    if(-1 == readproducts(p, fptr, nr))
     return -1;

    fclose(fptr);
    return 0;
}

你在函数中使用malloc的方式是错误的,请参阅here why。

PS。也就是说,二进制写入/读取可能无法在不同的计算机上移植。

相关问题