我试图从位图文件中读取标题。编译时,我会得到以下错误:“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/

10-12 14:49
查看更多