2013-06-30 2 views
0

C에서 프로그램을 작성하여 비트 맵 이미지를 열고 이미지 크기를 저장했습니다. fread 함수를 작성하는 데 문제가 있습니다. 제발 내가 쓴 코드에 함수에 대한 올바른 형식이어야한다고 말해주십시오 코드에 문제가 있습니까?코드에서 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(); 

    } 
+0

코드가 들여 쓰기가 창에 맞도록 코드를 변경하고 C++ 태그를 제거 할 수 있습니까? c. – jpw

+0

충돌하는 오류는 무엇입니까? 그것은 segfaulting인가? –

+0

메시지가 깜박입니다. "bitmap.exe가 작동을 멈췄습니다." 하지만 성공적으로 컴파일되어 별도의 부분으로 실행됩니다. –

답변

0

2 문제. 당신은 잘못된 양을 "생략"하는

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

if (fp!=NULL && (fgetc(fp[count])=='B' && fgetc(fp[count])=='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);