Скопируйте содержимое std :: vector в буфер char *?

У меня есть std :: vector. Я хочу скопировать содержимое вектора в буфер char * определенного размера.

Есть ли безопасный способ сделать это?

Могу я сделать это?

memcpy(buffer, _v.begin(), buffer_size);

или это?

std::copy(_v.begin(), _v.end(), buffer); // throws a warning (unsafe)

или это?

for (int i = 0; i < _v.size(); i++)
{
  *buffer = _v[i];
  buffer++;
}

Спасибо ..

8
задан krebstar 7 November 2011 в 21:46
поделиться

1 ответ

static std::vector<unsigned char> read_binary_file (const std::string filename)
{
    // binary mode is only for switching off newline translation
    std::ifstream file(filename, std::ios::binary);
    file.unsetf(std::ios::skipws);

    std::streampos file_size;
    file.seekg(0, std::ios::end);
    file_size = file.tellg();
    file.seekg(0, std::ios::beg);

    std::vector<unsigned char> vec(file_size);
    vec.insert(vec.begin(),
               std::istream_iterator<unsigned char>(file),
               std::istream_iterator<unsigned char>());
    return (vec);
}

и затем:

auto vec = read_binary_file(filename);
auto src = (char*) new char[vec.size()];
std::copy(vec.begin(), vec.end(), src);

, но не забывают удалять [] src позже

0
ответ дан 3 November 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: