C ++ Чтение всего двоичного файла в массив символов - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно прочитать все содержимое двоичного файла и передать его моему методу, который получает на входе массив символов. У меня есть сомнения по поводу приведения:

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);

Как теперь преобразовать вектор в массив символов без ошибок памяти безопасности?

1 Ответ

1 голос
/ 19 июня 2020

&data[0] на самом деле ваш состав. Пока ваш вектор go не выходит за пределы области видимости, вы не освобождаете этот указатель go за 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();

...