在 fstream 中,为什么 read() 和 write() 需要 const char*?

In fstream, why read() and write() require const char*?

我正在尝试编写一个可以复制 bmp 文件的 C++ 程序:

unsigned char* BMP_in(const char* filename) {
    ifstream f(filename, ios::binary);
    if (!f.is_open())
        return NULL;

    f.seekg(0, ios::end); //put pointer to the end of file
    int size = f.tellg();
    f.seekg(0, ios::beg);

    unsigned char* data = new unsigned char[size];

    f.read(reinterpret_cast<char*>(data), size);
    //why I can't just f.read(data,size)?

    return data;
}

在这些行中:

unsigned char* data = new unsigned char[size];

f.read(reinterpret_cast<char*>(data), size);

我不得不将数据转换为 char* 以避免错误。这不是我们需要施放那个东西的唯一情况。所以我想知道为什么我们需要这样做?为什么 read() 和 write() 不接受任何类型的指针?

因为std::ifstreamstd::basic_ifstream<char>

如果您想读取无符号字符,请使用

std::basic_ifstream<unsigned char> f(filename, ios::binary);