我试图从位图文件中读取标题。编译时,我会得到以下错误:“error:incompatible types in assignment”用于执行“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;
}
}
最佳答案
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;
}
}
关于c - 为什么会出现错误:分配中的类型不兼容?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17374787/