在c中使用fread时,为什么要将结构转换为char*?

kev*_*vin 1 c

假设我有一个"Passenger"结构,它有一个名称字段.

如果我这样做(就像我的书的语法显示):

fread(&passenger, sizeof(Passenger), 1, in_fp);
printf("%s", (*passenger).first_name)
Run Code Online (Sandbox Code Playgroud)

我遇到了分段错误,但如果我这样做:

fread( (char *)passenger, sizeof(Passenger), 1, in_fp);
printf("%s", (*passenger).first_name)
Run Code Online (Sandbox Code Playgroud)

从文件中读取的名称将被打印出来.

bma*_*ies 8

看起来好像'乘客'是一个指针.如果你带乘客,你将指针的地址传递给fread.当你施放它时,你告诉fread将它视为指向char缓冲区的指针而不是指向Passenger的指针.

  • 考虑到代码行(*passenger).first_name,这不可能是真的.这是一个指针. (2认同)