C fileIO与预期不符

时间:2018-10-26 00:35:36

标签: c undefined-behavior

我正在尝试使用c语言对二进制文件进行简单的写入和读取,但是遇到了麻烦。这是我尽可能简化的代码:

typedef struct car_struct{
    char* make;
    char* model;
    short year;
    long price;
    int uniqueID;
}Car;

int main(){
    FILE *fp = fopen("filename", "wb+");

    Car car = {"s","s",1,1,1};
    fwrite(&car, sizeof(Car), 1, fp);

    rewind(fp);
    Car* c;

    fread(c,sizeof(Car),1,fp);


    printf("%d \n",c->price);
}

我认为代码会将结构写入文件,然后读取它,并打印出其中一个字段。但是,实际结果是程序终止时根本没有输出任何内容。似乎未定义的行为已经潜入某个地方,但是我不确定在哪里。代码有什么问题?

2 个答案:

答案 0 :(得分:1)

您只是在写字符串的指针值,而不是字符串本身。使makemodel类似于char[32],使它们实际上在结构中,或者编写您自己的读/写例程。

也不要忽略检查所有IO操作的结果-可能会深入了解其他问题。

答案 1 :(得分:1)

问题出在行Car* c;上,您创建了一个指向某个随机地址的指针。您可以使用c

定义要malloc(sizeof(Car))保留的内存大小。