J'essaie de lire l'en-tête d'un fichier bitmap. Lorsque je compile, j'obtiens l'erreur suivante: "erreur: types incompatibles dans l'affectation" pour la ligne qui fait "bmp_header_p = bmp-> header;". Qu'est-ce que je fais mal ici?Pourquoi ai-je une erreur: types incompatibles dans l'affectation?
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;
}
}
En effet. Si ce n'est pas vraiment un pointeur, alors ajoutez le '&' pour obtenir l'adresse de la variable. – Jite
Quelle serait la syntaxe de l'appelant pour l'allouer? –
struct _bmpfile bf; (ceci en construira un sur la pile, ce qui est bien si vous êtes dans main() ou quelque part vous pouvez contrôler la durée de vie de la variable (c'est-à-dire que la variable est indésirable lorsque cette fonction est terminée) devrait faire: struct _bmpfile * bf = (_bmpfile *) malloc (sizeof (_bmpfile)); Si vous faites la version automatique (sans malloc), vous appelez votre routine get_header comme suit: success = bmp_get_header_from_file (fichier, &bf); sinon vous ferez (bmp_get_header_from_file (fichier, bf), puisque bf sera un pointeur – crowder