我有以下代码。文件包含一个位图图像,第一个字节是0x424d。我希望第一个printf打印BM,而不是BM??.
另外,第二个printf打印10,我希望它是一个更大的数字,因为文件大于10字节。

fp = fopen("input.bmp", "r");
bmp_header_p = malloc(sizeof(bmp_header_t));

rewind(fp);
fread(bmp_header_p, sizeof(char), 14, fp);

printf("magic number = %s\n", bmp_header_p->magic);
printf("file size = %" PRIu32 "\n", bmp_header_p->filesz);

typedef struct {
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. */
uint32_t filesz;    /* the size of the BMP file in bytes */
                     of the byte where the bitmap data can be found. */
} bmp_header_t;

最佳答案

%s用于以空结尾的字符串magic只是一个2字节的数组,而不是一个字符串。

printf("magic number = %c%c\n", bmp_header_p->magic[0], bmp_header_p->magic[1]);

关于c - 我如何正确指向这块内存以将其视为我的结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17254676/

10-11 12:21