C ++将指针混合到不同的char类型

时间:2013-04-05 08:47:57

标签: c++ casting warnings

我正在用C ++编写一个程序,它接受一个ACT(Adobe Color Table)文件并将其转换为纯文本可读的JASC-PAL文件。我想从ACT文件中读取二进制数据并将其存储在内存中以供使用。我编写了以下代码来执行此操作,并使用BCC55构建。问题是我得到了一个构建警告:“警告W8079:在函数read_file()中混合指向不同'char'类型的指针”。

unsigned char * memblock;

bool read_file()
{
    int filesize;
    ifstream act ("test.act", ios::binary|ios::ate);
    if (act.is_open())
    {
        filesize = act.tellg();
        act.seekg(0);
        memblock = new unsigned char [filesize];
        act.read(memblock, filesize);
        act.close();
        cout << "Color Table loaded to memory." << endl;
        return true;
    }
    else
    {
        cout << "Failed to open file." << endl;
        return false;
    }
}

在Embarcadero文档维基上看这个警告似乎是因为我将一个unsigned char指针传递给一个期望一个常规char指针的函数。它说这在技术上是不正确的,但通常是无害的。我的问题是,如果严格来说这是不正确的,那么如何在不造成W8079构建时警告的情况下这样做?我是否应该为此烦恼,因为警告是无害的,我的代码按预期工作?

1 个答案:

答案 0 :(得分:1)

添加演员。在这种情况下,我只会使用简单的C演员。

act.read((char*)memblock, filesize);

但您也可以使用reinterpret_cast

act.read(reinterpret_cast<char*>(memblock), filesize);

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