0

我正在尝试从位图文件中读取标题。编译时出现以下错误;执行“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;
        }   
} 
4

1 回答 1

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;
        }   
} 
于 2013-06-28T22:52:28.817 回答