C++;混合指向不同字符类型的指针 我正在编写一个C++程序,它使用ACT(Adobe颜色表)文件,并将其转换成纯文本可读的JASC-PAL文件。我想从ACT文件中读取二进制数据,并将其存储在内存中以供使用。我编写了以下代码来实现这一点,它使用BCC55构建。问题是我得到了一个构建警告:“警告W8079:在函数read_file()中混合指向不同“char”类型的指针” unsigned char*memblock; bool read_文件() { int文件大小; ifstream-act(“test.act”,ios::binary | ios::ate); if(act.is_open()) { filesize=act.tellg(); 法案.见kg(0); memblock=新的无符号字符[filesize]; 读取(memblock,filesize); act.close(); cout

C++;混合指向不同字符类型的指针 我正在编写一个C++程序,它使用ACT(Adobe颜色表)文件,并将其转换成纯文本可读的JASC-PAL文件。我想从ACT文件中读取二进制数据,并将其存储在内存中以供使用。我编写了以下代码来实现这一点,它使用BCC55构建。问题是我得到了一个构建警告:“警告W8079:在函数read_file()中混合指向不同“char”类型的指针” unsigned char*memblock; bool read_文件() { int文件大小; ifstream-act(“test.act”,ios::binary | ios::ate); if(act.is_open()) { filesize=act.tellg(); 法案.见kg(0); memblock=新的无符号字符[filesize]; 读取(memblock,filesize); act.close(); cout,c++,casting,warnings,C++,Casting,Warnings,添加一个cast。在这种情况下,我只使用一个简单的C cast act.read((char*)memblock, filesize); 但你也可以使用reinterpret_cast act.read(reinterpret_cast<char*>(memblock), filesize); act.read(重新解释cast(memblock),文件大小); 但是这使得它看起来比实际情况更重要。正如文档所说,这是无害的。添加一个cast。在这种情况下,我只使用一个简单的C

添加一个cast。在这种情况下,我只使用一个简单的C cast

act.read((char*)memblock, filesize);
但你也可以使用reinterpret_cast

act.read(reinterpret_cast<char*>(memblock), filesize);
act.read(重新解释cast(memblock),文件大小);

但是这使得它看起来比实际情况更重要。正如文档所说,这是无害的。

添加一个cast。在这种情况下,我只使用一个简单的C cast

act.read((char*)memblock, filesize);
但你也可以使用reinterpret_cast

act.read(reinterpret_cast<char*>(memblock), filesize);
act.read(重新解释cast(memblock),文件大小);

但这似乎比实际情况更重要。正如文档所说,这是无害的。

通常你永远不应该忽略编译器发出的警告……你是在某处释放内存吗?这更糟糕……为什么你要对
memblock
使用
无符号字符呢?当不同的API调用ome在一起-标准的C I/O类型是
char
,但字节存储数组的自然类型是
unsigned char
…令人高兴的是,这些类型完全与布局兼容,但您可能需要在某个点上进行强制转换。是的,我使用delete[]在main()函数末尾释放内存。很抱歉,我没有包括这一部分,因为我对这一部分没有任何疑问。通常,你永远不应该忽略编译器发出的警告…你是否在某处释放了内存?这更糟糕…为什么你要对
memblock
使用
无符号字符?当不同的API组合在一起时,会有一定程度的ick-t标准的C I/O类型是
char
,但字节存储数组的自然类型是
unsigned char
…令人高兴的是,这些类型完全与布局兼容,但您可能需要在某个时候进行强制转换。是的,我使用delete[]在main()函数末尾释放内存。抱歉,我没有包含该位,因为我对该部分没有任何疑问。谢谢,我想在本例中,指针类型并不重要,因为它是1字节。我使用无符号字符的原因是,我正在读取的数据将被解释为数字,而它作为常规字符溢出为负值。请不要记录C++代码中的C样式转换:它们在代码中引入了易碎的点,如果我们与数据类型同步,导致不明确的行为,并且很难被工具找到(参见)。基本上,即使在代码中添加它们时它们是正确的,但在扩展/维护代码时也必须显式管理它们,但在代码库中很难找到它们。对于这段代码,我想不出使用C样式转换可能会导致未来问题的任何维护任务。否则,我不会推荐它。谢谢,我想在这种情况下,指针类型并不重要,因为它是1字节的。我之所以使用无符号字符是因为我读取的数据被解释为数字,并且它作为一个普通字符溢出到负值。请不要在C++代码中推荐C样式的转换:它们在代码中引入易碎的点,导致未定义。如果我们的行为与数据类型不同步),工具很难找到(请参阅)。基本上,即使在代码中添加它们时它们是正确的,但在扩展/维护代码时也必须显式管理它们,但在代码库中很难找到它们。对于这段代码,我想不出使用C样式转换可能会导致未来问题的任何维护任务。否则,我不会推荐它。