Здравствуйте, я работаю над своим строковым классом, и я хотел добавить функцию стирания. Итак, я решил, что использую стратегию копирования памяти до начального индекса, а затем копирую память после длины + начального индекса. Это просто скопирует данные за пределы той части, которую вы хотите удалить.
Вот мой код прямо сейчас.
//size is the current size of the string not including the null terminator character
//data is the character array of data
void erase(const size_t start, const size_t length) {
if (start + length <= size) {
size_t tempsize = start + length;
char* temp = new char[size + 1 - length];
//copy before start
if(start > 0)
memcpy(temp, data, start);
//copy after start (including null terminator character)
memcpy(temp + start, data + start + length, size + 1 - length - start);
delete[] data;
data = temp;
data[size] = '\0';
size = tempsize;
}
}
Он отлично работает, избавляясь от количества символов, которое вы хотите, но выдает ошибку повреждения кучи, когда я удаляю строку.