来自二进制文件的结构数组

Array of struct from binary file

我必须编写一个函数来读取 Product 类型的结构数组,其中数据来自二进制 file.This 文件,其中包含产品数量 - 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;
}

你必须把它修改成这样:

#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原因。

PS。也就是说,二进制 writing/reading 可能无法跨不同计算机移植。