在 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::ifstream
是std::basic_ifstream<char>
。
如果您想读取无符号字符,请使用
std::basic_ifstream<unsigned char> f(filename, ios::binary);
我正在尝试编写一个可以复制 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::ifstream
是std::basic_ifstream<char>
。
如果您想读取无符号字符,请使用
std::basic_ifstream<unsigned char> f(filename, ios::binary);