我有下面的代碼,從文件讀取到一個結構和一個arrary。當我嘗試在結構中打印數據時,它不是我所期望的。該數組打印出預期的內容,即文件中的前兩個字符。爲什麼fread()進入我的結構工作?
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/8/16字節,所以他很幸運,不過啊,這是不可靠的行爲。 –