我正在尝试从位图文件中读取标头。当我编译时,我得到以下错误;对于执行“bmp_header_p = bmp-> header;”的行,“错误:赋值中的不兼容类型”。我在这里做错了什么?
struct _bmpfile {
bmp_header_t header;
bmp_dib_v3_header_t dib;
rgb_pixel_t **pixels;
rgb_pixel_t *colors;
};
typedef struct _bmpfile bmpfile_t;
bool
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp)
{
bmp_header_t *bmp_header_p;
bmp_header_p = bmp->header;
fseek(filename, 0L, SEEK_SET);
bmp_header_p = malloc(sizeof(bmp->header));
if(14 != fread(bmp_header_p, sizeof(char), 14, filename)) {
perror("message");
return FALSE;
} else {
return TRUE;
}
}
答案 0 :(得分:3)
struct _bmpfile {
bmp_header_t header;
bmp_dib_v3_header_t dib;
rgb_pixel_t **pixels;
rgb_pixel_t *colors;
};
这个“标题”不是指针。
bmp_header_t *bmp_header_p;
这是。编译器正在抓紧你,因为你试图将非指针的东西分配给指针。这些类型不同。
查看你的代码,你根本不需要或者想要这个赋值,你甚至不需要malloc,假设你的bmp对象已经被调用者分配了:
bool
bmp_get_header_from_file(FILE *filename, bmpfile_t *bmp)
{
fseek(filename, 0L, SEEK_SET);
if(sizeof(bmp_header_t) != fread(&bmp->header, sizeof(bmp_header_t), sizeof(char), filename)) {
perror("message");
return FALSE;
} else {
return TRUE;
}
}