c语言char语法错误,C语言中“char”数组的malloc中的转换错误[关闭]

使用struct变量和struct数组读取bmp图像的代码 . 请建议我对malloc进行类型转换的正确方法(代码下面列出的错误):

#include

#include

typedef struct bands{

/* .bmp image store pixel colors in "bgr" sequence */

unsigned char b,g,r; //in 24bit bmp, we need to use 8bit datatype for each color

}bands;

int main()

{

FILE *bmpimage; //ptr to read image file

FILE *redpix,*greenpix,*bluepix; //ptr to create band/color wise file

unsigned short pix_x=223,pix_y=197; /*pix_x: no. of pixels in a row, pix_y: no. of pixels in a column of input image*/

unsigned short n_pix=pix_x*pix_y; /*variable to count total no. of pixels*/

bmpimage=fopen("blocks223x197.bmp","r"); //24 bit bmpimage

redpix=fopen("redpixels.txt","w");

greenpix=fopen("greenpixels.txt","w");

bluepix=fopen("bluepixels.txt","w");

/* Define a pointer to a memory block,'*readbuffer',

that has 'n_pix' no. of memory blocks each of size same as struct bands */

bands *readbuffer=(char*)malloc(n_pix*sizeof(*readbuffer));

int n;

//Create memory for each of 'n_pix' no. of pixel array of each color

for(n=0;n

unsigned char *readbuffer[n].b = (char*) malloc(sizeof(readbuffer[n].b));

unsigned char *readbuffer[n].g = (char*) malloc(sizeof(readbuffer[n].g));

unsigned char *readbuffer[n].r = (char*) malloc(sizeof(readbuffer[n].r));

}

if(!bmpimage){printf("Error reading bmpimage!");return 1;}

if(readbuffer==NULL){printf("NULL buffer"); exit(1);}

/* Go to 54th byte to access pixelvalue data (since, 24bit bmp format) */

fseek(bmpimage,54,SEEK_SET);

/* Read 'n_pix' no. of 'bgr' blocks each of which are of the size same as "struct bands" */

fread(readbuffer,sizeof(bands),n_pix,bmpimage); /*read 'n_pix' no. of 'bgr' blocks each of which are of the size same as "struct bands" to the memory address, 'readbuffer' or '&readbuffer[0]' */

int n_blocks=(sizeof(readbuffer)/sizeof(bands));

printf("no. of blocks read= %d, n_pix=%d",n_blocks,n_pix);

int i,j; int count; count=0;

/* logic to print pixel values in correct order*/

for(i=pix_y;i>0;i--){ /*for accessing row data. Choose to print from bottom to top*/

for(j=1;j<=pix_x;j++){ /*for accessing column data. Print from left to right*/

if(j!=pix_x){

fprintf(redpix,"%d,",readbuffer[(i-1)*pix_x + j].r);

fprintf(greenpix,"%d,",readbuffer[(i-1)*pix_x + j].g);

fprintf(bluepix,"%d,",readbuffer[(i-1)*pix_x + j].b);

}

else{

count++;

fprintf(redpix,"%d\n",readbuffer[(i-1)*pix_x + j].r);

fprintf(greenpix,"%d\n",readbuffer[(i-1)*pix_x + j].g);

fprintf(bluepix,"%d\n",readbuffer[(i-1)*pix_x + j].b);

}

}

}

// free allocated memory

for(n=0;n

free(readbuffer[n].b) ;

free(readbuffer[n].g) ;

free(readbuffer[n].r) ;

}

fclose(bmpimage);fclose(redpix);fclose(bluepix);fclose(greenpix);

return 0;

}

错误列表:

bmpread_check.c:在函数'main'中:bmpread_check.c:24:19:警告:从不兼容的指针类型初始化> [默认启用] band readbuffer =(char)malloc(n_pix * sizeof(* readbuffer)); ^ bmpread_check.c:29:33:错误:在' . '之前预期'=',',',';','asm'或'attribute'> token unsigned char readbuffer [n] .b =(char)malloc(sizeof(readbuffer [n] .b)); ^ bmpread_check.c:29:33:错误:' . '之前的预期表达式token bmpread_check.c:30:33:error:在' . '之前预期'=',',',';','asm'或'attribute'> token unsigned char readbuffer [n] .g =(char)malloc(sizeof(readbuffer [n] .g)); ^ bmpread_check.c:30:33:错误:' . '之前的预期表达式token bmpread_check.c:31:33:error:在' . '之前预期'=',',',';','asm'或'attribute'> token unsigned char readbuffer [n] .r =(char)malloc(sizeof(readbuffer [n] .r)); ^ bmpread_check.c:31:33:错误:' . '之前的预期表达式token bmpread_check.c:69:5:警告:传递'free'的参数1使得指针来自>整数而没有强制转换[默认启用] free(readbuffer [n] .b); ^在bmpread_check.c中包含的文件中:3:0:c:\ mingw \ include \ stdlib.h:357:38:注意:预期'void'但参数是>类型'unsigned char'_CRTIMP void __cdecl __MINGW_NOTHROW free(无效); ^ bmpread_check.c:70:5:警告:传递'free'的参数1使得指针来自>整数而没有强制转换[默认启用] free(readbuffer [n] .g); ^在bmpread_check.c中包含的文件中:3:0:c:\ mingw \ include \ stdlib.h:357:38:注意:预期'void'但参数是>类型'unsigned char'_CRTIMP void __cdecl __MINGW_NOTHROW free(无效); ^ bmpread_check.c:71:5:警告:传递'free'的参数1使得指针来自>整数而没有强制转换[默认启用] free(readbuffer [n] .r); ^在bmpread_check.c中包含的文件中:3:0:c:\ mingw \ include \ stdlib.h:357:38:注意:预期'void'但参数类型>'unsigned char'_CRTIMP void __cdecl __MINGW_NOTHROW free(无效); ^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值