在C ++中将结构类型转换为unsigned char *

时间:2018-06-22 09:38:48

标签: c++ pointers struct casting char

我的程序中具有以下结构。

typedef unsigned char BYTE;
struct data
{
BYTE a;
BYTE b;
BYTE c;
};

有些行晚了.....我创建了该结构的一个实例

data buffer[100][100];

稍后在程序中,我必须将“ buffer”实例转换为char *以便被另一个函数使用。

int bmp_generator(char *filename, int width, int height, BYTE* data)
{
BITMAPFILEHEADER bmp_head;
BITMAPINFOHEADER bmp_info;
int size=width*height*3;

bmp_head.bfType=0x4D42;
bmp_head.bfSize=size + sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
bmp_head.bfReserved1=bmp_head.bfReserved2=0;
bmp_head.bfOffBits=bmp_head.bfSize-size;

bmp_info.biSize=40;
bmp_info.biWidth=width;
bmp_info.biHeight=height;
bmp_info.biPlanes=1;
bmp_info.biBitCount=24;// bits per pixel
bmp_info.biCompress=0;
bmp_info.biSizeImage=size;
bmp_info.biXPelsPerMeter=0;
bmp_info.biYPelsPerMeter=0;
bmp_info.biClrUsed=0;
bmp_info.biClrImportant=0;

FILE *fp;
if (!(fp=fopen(filename,"wb"))) return 0;

fwrite(&bmp_head,1, sizeof(BITMAPFILEHEADER), fp);
fwrite(&bmp_info,1,sizeof(BITMAPINFOHEADER), fp);
fwrite (data, 1, size, fp);
fclose(fp);

return 1;
}

[稍后再行]

bmp_generator("./test.bmp", 512, 512, (BYTE*)buffer);

但是,当我运行上面的代码时,gcc编译器会警告我说 “警告:不建议从字符串常量转换为'char *'[-Wwrite-strings]”

有人可以帮我这个忙吗?预先感谢。

1 个答案:

答案 0 :(得分:2)

警告不是关于struct,而是关于THEfUNCTION的第一个参数。似乎该函数将char*作为第一个参数。现在,您作为参数传递的字符串文字将转换为char*,但不建议使用这种转换。

通常,要做的一件好事是,只要您可以控制使用的函数的签名,就可以将字符串文字转换为const char*