在代码中遇到fread功能问题

时间:2013-06-30 13:40:57

标签: c

我在C中编写了一个程序来打开位图图像并保存图像的尺寸。我在编写fread函数时遇到了一些问题。请告诉我在我编写的代码中该函数的正确格式应该是什么 代码有什么问题吗?

#include<conio.h>
#include<stdio.h>
#include<stdlib.h>


void fskip(FILE *fp, int num_bytes)
{
   int i;
   for (i=0; i<num_bytes; i++)
      fgetc(fp);
}

typedef struct tagBITMAP              /* The structure for a bitmap. */
{
 int width;
 int height;
 //unsigned char *data;
} BITMAP;


int main()
{
    int temp1=0;
    BITMAP *bmp[50];

    FILE *fp = fopen("splash.bmp","rb");

    if (fp!=NULL && (fgetc(fp[count])=='B' && fgetc(fp[count])=='M')){
    bmp[temp1] = (BITMAP *) malloc (sizeof(BITMAP));

    fskip(fp,16);
    fread(&bmp[temp1].width, sizeof(int), 1, fp);

    fskip(fp,2);
    fread(&bmp[temp1].height,sizeof(int), 1, fp);



     fclose(fp);
     }
     else exit(0);

     getch();

     }

1 个答案:

答案 0 :(得分:0)

2个问题。

if (fp!=NULL && (fgetc(fp[count])=='B' && fgetc(fp[count])=='M')){

应该是

if (fp!=NULL && (fgetc(fp)=='B' && fgetc(fp)=='M')){

你正在“跳过”错误的金额

// read 1 integer (likely size 4)
fread(&bmp[temp1].width, sizeof(int), 1, fp);
// Skip 2 bytes
fskip(fp,2);
// read another integer (likely size 4)
fread(&bmp[temp1].height,sizeof(int), 1, fp);

一种解决方案

fread(&bmp[temp1].width, sizeof(int), 1, fp);
// Don't skip - you are in the right location.
fread(&bmp[temp1].height,sizeof(int), 1, fp);

更好的解决方案

typedef struct tagBITMAP              /* The structure for a bitmap. */
{
   uint32_t width;
   uint32_t height;
} BITMAP;

fread(&bmp[temp1].width, sizeof(bmp[temp1].width) , 1, fp);
fread(&bmp[temp1].height,sizeof(bmp[temp1].height), 1, fp);