0

ファイルから構造体と配列に読み取る次のコードがあります。構造体のデータを印刷しようとすると、期待したものではありません。配列は、ファイルの最初の 2 文字であると予想されるものを出力します。

typedef struct __attribute__((packed)){
        uint8_t magic[2];   /* the magic number used to identify the BMP file:
                     0x42 0x4D (Hex code points for B and M).
                     The following entries are possible:
                     BM - Windows 3.1x, 95, NT, ... etc
                     BA - OS/2 Bitmap Array
                     CI - OS/2 Color Icon
                     CP - OS/2 Color Pointer
                     IC - OS/2 Icon
                     PT - OS/2 Pointer. */
} bmp_header_t;


bool
bmp_get_header_from_file(FILE *fp, bmpfile_t *bmp)
{
       fseek(fp, 0L, SEEK_SET);
       char magic[1];

       fread(magic, 1, 2, fp);
       printf("magic is: %c, %c\n", magic[0], magic[1]);

       fread(&bmp->header, 1, 2, fp); 
       printf("magic is: %c, %c\n", bmp->header.magic[0], bmp->header.magic[1]);
}
4

2 に答える 2

0

まず最初に、 2 バイトではなく1char magic[1]バイトを提供します。そこに 2 バイトを読み込むことは絶対にできません。

2つ目は、最初のバイトがファイル ポインタを進めているため、2 つ目はファイル内の最初の 2 バイトではなく、次のfread2 バイトを読み取ろうとすることです。fread

このようなものが良いでしょう:

   char magic[2];

   fseek(fp, 0L, SEEK_SET);
   fread(magic, 1, 2, fp);
   printf("magic is: %c, %c\n", magic[0], magic[1]);

   fseek(fp, 0L, SEEK_SET);
   fread(&bmp->header, 1, 2, fp); 
   printf("magic is: %c, %c\n", bmp->header.magic[0], bmp->header.magic[1]);
于 2013-06-29T03:29:51.480 に答える