簡體   English   中英

為什么不將fread()放入我的結構工作中?

[英]Why doesn't fread() into my struct work?

我有以下代碼,這些代碼從文件讀取到結構和庫中。 當我嘗試在結構中打印數據時,這不是我期望的。 該數組將打印出預期的結果,即文件中的前兩個字符。

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]);
}

當你做的第一fread ,你預先將文件的讀取位置,所以第二fread將讀取接下來的兩個字節。 您需要在第二次閱讀之前添加另一個fseek

首先, char magic[1]給您一個字節,而不是兩個字節。 讀兩個字節絕對是不行。

其次,在隨后fread將試圖讀取該文件,而不是前兩個在接下來的兩個字節,因為第一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]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM