diff --git a/include/rexy/string_base.tpp b/include/rexy/string_base.tpp index d9c54d6..231c870 100644 --- a/include/rexy/string_base.tpp +++ b/include/rexy/string_base.tpp @@ -696,12 +696,13 @@ namespace rexy{ REXY_CPP20_CONSTEXPR auto basic_string::_insert_impl(size_type pos, InputIt start, size_type insert_count)noexcept(is_nothrow_allocator_v) -> basic_string&{ const size_type len = this->length(); const size_type cap = this->capacity(); - const size_type after_pos_count = len > pos ? len - pos : 0; + //add one for null terminator + const size_type after_pos_count = (len > pos ? len - pos : 0) + 1; if(insert_count + len <= cap){ - auto* dest_ptr = this->data() + len + insert_count - 1; - const auto* src_ptr = this->data() + pos + insert_count; + auto* dest_ptr = this->data() + len + insert_count; + const auto* src_ptr = this->data() + len; for(size_type i = 0;i < after_pos_count;++i){ *dest_ptr-- = *src_ptr--; } @@ -727,8 +728,6 @@ namespace rexy{ } rexy::memcpy(ptr, this->get_pointer() + pos, sizeof(value_type) * after_pos_count); - ptr += after_pos_count; - *ptr = 0; //null terminator newstr.set_length(len + insert_count); return (*this = std::move(newstr));