Я обрабатываю несколько фрагментов байтовых массивов (uint_8) и добавляю их в строку (my_string). В целях эффективности я зарезервировал более чем достаточно байтов для своей строки с помощью
my_string.reserve(more_than_enough_bytes);
Я пытаюсь добавить каждый фрагмент, как показано в следующей функции:
bool MyClass::AppendToMyString(uint_8* chunk, size_t chunk_num_bytes) {
memcpy(const_cast<uint_8*>(my_string.data()), chunk, chunk_num_bytes);
return true;
}
Но проблема в том, что memcpy не обновляет my_string размер. Итак, в следующий раз, когда эта функция вызывается, я не знаю, где был последний элемент, кроме как использовать для него отдельную переменную. Есть идеи?
Я удивлен memcpy(my_string, chunk, chunk_num_bytes); компилируется. Какой тип my_string? Я предполагал std::string, но, возможно, нет.
Используйте std::string::append. Перегрузка 4 с этой страницы должна оптимизироваться для вас до memcpy.
string's size и length методы гарантированно будут постоянная сложность. Это означает, что когда вы вызываете size, string не может убежать и подсчитать количество символов до первого нулевого значения. Должна быть возможность установить размер по мере изменения string. Поскольку memcpy не знает, что это операция над string, он просто видит адрес, по которому должен писать, он не может обновить размер string.





Вы должны использовать метод my_string.append, для чего он предназначен.
my_string.append(chunk, chunk_num_bytes);Возможно вам понадобится слепок отuint_8*доchar*