我正在尝试使用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);
}
我认为代码会将结构写入文件,然后读取它,并打印出其中一个字段。但是,实际结果是程序终止时根本没有输出任何内容。似乎未定义的行为已经潜入某个地方,但是我不确定在哪里。代码有什么问题?
答案 0 :(得分:1)
您只是在写字符串的指针值,而不是字符串本身。使make
和model
类似于char[32]
,使它们实际上在结构中,或者编写您自己的读/写例程。
也不要忽略检查所有IO操作的结果-可能会深入了解其他问题。
答案 1 :(得分:1)
问题出在行Car* c;
上,您创建了一个指向某个随机地址的指针。您可以使用c
malloc(sizeof(Car))
保留的内存大小。