【问题标题】:Typecasting a struct to unsigned char* in c++在 C++ 中将结构类型转换为 unsigned char*
【发布时间】:2018-06-22 09:38:47
【问题描述】:

我的程序中有以下结构。

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

迟到了几行.....我创建了一个结构实例

data buffer[100][100];

稍后在程序中,我必须将“缓冲区”实例类型转换为 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]”

谁能帮我解决这个问题。提前致谢。

【问题讨论】:

  • 这不是结构的实例。那是结构的 10,000 个实例。
  • 如果没有您的minimal reproducible example,我们无法回答这个问题,但问题与bufferdata 类型无关——它与您如何处理first 有关THEfUNCTION 函数/宏的 参数,因为那是字符串常量/文字所在的位置。请出示您的minimal reproducible example 并抽象出所有不相关/不必要的干扰。 (这是您应该已经执行的调试。)
  • 就您发布的代码而言,该错误与您的data 结构无关。我们需要查看(令人讨厌的大写)THEfUNCTION 的签名。
  • 我已经添加了完整的功能。我没有提出问题的原因是因为那时人们会开始建议使用库来创建位图,而我不能在我参与的项目中这样做。因此,功能。

标签: c++ pointers struct casting char


【解决方案1】:

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

一般来说,只要您可以控制所使用函数的签名,就可以将字符串文字转换为const char*

【讨论】:

  • 请注意,从 C++11 开始,转换不仅被弃用。格式不正确。
猜你喜欢
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2020-10-11
  • 2020-05-03
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
相关资源
最近更新 更多