首页 > 解决方案 > C ++将整个二进制文件读入char数组

问题描述

我需要读取二进制文件的全部内容并将其传递给我的方法,该方法接收一个 char 数组作为输入。我对选角有疑问:

infile.open(argv[1], std::ios::binary);
infile.seekg(0, std::ios::end);
size_t file_size_in_byte = infile.tellg();
std::vector<char> data;
data.resize(file_size_in_byte);
infile.seekg(0, std::ios::beg);
infile.read(&data[0], file_size_in_byte);

现在如何将向量转换为 char 数组而不会出现安全内存错误?

标签: c++filecastingbuffer-overflow

解决方案


&data[0]实际上是你的演员。只要您的向量没有超出范围,您就不会释放该指针,也不会超过file_size_in_byte/ data.size()。您可以安全地阅读它。喜欢:

char* data_ptr = &data[0];

for(int i = 0; i < file_size_in_byte; i++)
{
   // do something with data_ptr[i]
}

或将其传递给函数,如下所示:

char* data_ptr = &data[0];

process_file_data(data_ptr, data.size());

或者,正如灰熊在下面的评论中提到的那样,只需使用:char * data_ptr = data.data();


推荐阅读