我怎么能用fread读取二进制文件?

时间:2014-03-18 22:02:22

标签: c arrays pointers

 typedef struct
{
    char*title;
    char* year;
    char* length; //in minutes
} record;

void write(record* list[])
{
    FILE* out=fopen("output.bin","a");
    if(!out)
    {
        printf("error"); exit(1);
    }else
    {
        int i;
        for (i = 0; i < 1024; i++)
        {
            if(list[i]!=NULL)
                fwrite(list[i], sizeof(record), 1, out);
        }
        fclose(out);
    }
}
void read_back()
{
    FILE* input=fopen("output.bin","r");
    if(!input)
    {
        printf("error"); exit(1);
    }else
    {
        record* temp[1024];
        fread(temp,sizeof(record)*1024,1,input);


        fclose(input);
    }

}

我怎么能用fread读取二进制文件?任何人都可以检查我是否使用fwrite正确吗?我希望我的read_back方法在结构中打印内容(标题,年份等)。

1 个答案:

答案 0 :(得分:1)

record struct元素定义为pointer s。 fread无法隐式分配这些指针。对于record结构中的每个元素,应该显式读取值,并且应在通过malloc进行内存分配后分配相关值。

fwrite只会以这种方式将内存地址写入内存,因为record结构只包含指针

有两个选项

定义静态数组定义,如下所示

 typedef struct
{
    char title[256];
    char year[4];
    char length[8]; //in minutes
} record;

逐个编写record结构元素及其引用。