【发布时间】:2015-05-19 05:26:27
【问题描述】:
所以,我尝试使用 fread 和结构读取 BMP 图像。我创建以下结构来读取标题
struct head{
char sigBM[2];//This will get the 'B' and 'M' chars
int fileSize;
int reserved;
int offset
...
};
在我使用的主要功能中
fread(pointerToStruct,sizeof(struct head),1,image);
我刚刚得到了一些奇怪的结果。但后来我决定从结构中取出 char sigBM[2] 并用不同的 fread 读取它。比如:
char sigBM[2];
struct head *p = malloc(sizeof(struct head));/*
Without the char sigBM[2]
*/
fread(sigBM,sizeof(char),2,image);
fread(p,sizeof(struct head),1,image);
它成功了!
我已经开始工作了,我只是想知道为什么会这样
【问题讨论】:
-
struct head可能有一些填充:sigBM和fileSize之间的两个未使用的字节,仍然占用空间,因此消耗了您在读取时未预料到的两个字节。你可以告诉你的编译器不要填充这个结构;不过,我没有这方面的经验。 -
确保
sizeof(struct head)与您代码中的sizeof(struct head)文件相同。