问题:#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <malloc.h>#define WIDTHBYTES(i) ((i+31)/32*4)//#pragma warning(disable: 4996)int main(){BITMAPFILEHEADER bf; BITMAPINFOHEADER bi; FILE* fp; RGBQUAD *ipRGB; DWORD LineByte,ImgSize; DWORD NumColors; unsigned char * * Imgdata; int i,j; char * fileName; printf(please enter filename:); scanf(%s,&fileName); fp=fopen(fileName,rb); fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp); LineByte=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount); ImgSize=(DWORD)LineByte*bi.biHeight; if (bi.biClrUsed != 0 ) NumColors=(DWORD)bi.biClrUsed; else switch (bi.biBitCount) {case 1:NumColors=2;break; case 4:NumColors=16;break; case 8:NumColors=256;break; case 24:NumColors=0;break; } ipRGB=(RGBQUAD *)malloc(NumColors*sizeof(RGBQUAD)); fread(ipRGB,sizeof(RGBQUAD),NumColors,fp); Imgdata=new unsigned char*[bi.biHeight]; for ( i=(bi.biHeight)-1;i>=0;i--) Imgdata[i]=new unsigned char[bi.biWidth]; for ( i=(bi.biHeight)-1;i>=0;i--) for(j=0;j<bi.biWidth;j++) fread(&Imgdata[i][j],1,1,fp); fclose(fp); fp=fopen(mybmp.bmp,wb); fwrite(&bf,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bi,sizeof(BITMAPINFOHEADER),1,fp); fwrite(ipRGB,sizeof(RGBQUAD),NumColors,fp); for (i=(bi.biHeight)-1 ;i>=0;i--) for (j=0 ;j<bi.biWidth;j++) fwrite(&Imgdata[i][j],1,1,fp); free(Imgdata); return 0;}//最好能告诉我正确的代码,急用
char * fileName; printf("please enter filename:"); scanf("%s",&fileName);
又是不分配内存,还往里面装东西的错误.
应该改为:
char fileName[256]; printf("please enter filename:"); scanf("%s",fileName);
指针不能存储变量的,他只能标记一段内存地址。
改完之后,完全能运行成功。 如果你对#include <windows.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <malloc.h>#define WIDTHBYTES(i) ((i+31)/32*4)//#pragma warning(disable: 4996)int main(){BITMAPFILEHEADER bf; BITMAPINFOHEADER bi; FILE* fp; RGBQUAD *ipRGB; DWORD LineByte,ImgSize; DWORD NumColors; unsigned char * * Imgdata; int i,j; char * fileName; printf(please enter filename:); scanf(%s,&fileName); fp=fopen(fileName,rb); fread(&bf,sizeof(BITMAPFILEHEADER),1,fp); fread(&bi,sizeof(BITMAPINFOHEADER),1,fp); LineByte=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount); ImgSize=(DWORD)LineByte*bi.biHeight; if (bi.biClrUsed != 0 ) NumColors=(DWORD)bi.biClrUsed; else switch (bi.biBitCount) {case 1:NumColors=2;break; case 4:NumColors=16;break; case 8:NumColors=256;break; case 24:NumColors=0;break; } ipRGB=(RGBQUAD *)malloc(NumColors*sizeof(RGBQUAD)); fread(ipRGB,sizeof(RGBQUAD),NumColors,fp); Imgdata=new unsigned char*[bi.biHeight]; for ( i=(bi.biHeight)-1;i>=0;i--) Imgdata[i]=new unsigned char[bi.biWidth]; for ( i=(bi.biHeight)-1;i>=0;i--) for(j=0;j<bi.biWidth;j++) fread(&Imgdata[i][j],1,1,fp); fclose(fp); fp=fopen(mybmp.bmp,wb); fwrite(&bf,sizeof(BITMAPFILEHEADER),1,fp); fwrite(&bi,sizeof(BITMAPINFOHEADER),1,fp); fwrite(ipRGB,sizeof(RGBQUAD),NumColors,fp); for (i=(bi.biHeight)-1 ;i>=0;i--) for (j=0 ;j<bi.biWidth;j++) fwrite(&Imgdata[i][j],1,1,fp); free(Imgdata); return 0;}//最好能告诉我正确的代码,急用这个问题有好的意见或
建议,请留言
|