Создание самодельной копии функции erase() в C

#c #string #function #runtime-error #erase

#c #строка #функция #время выполнения-ошибка #стереть

Вопрос:

Я пытаюсь создать функцию, чтобы делать то, что встроенная функция .erase() делает в c , со следующим кодом:

 string delChar(string text, int no_of_ch_to_delete, int starting_point)
{
    int Final_Point = starting_point   no_of_ch_to_delete;
    for (int i = starting_point; i <= Final_Point; i  )
    {
        text = text.at(i) = '';
    }
    return text;
}

 

Это выдает ошибку, которую я не могу понять:

 Unhandled exception thrown: write access violation.
std::basic_string<char,std::char_traits<char>,std::allocator<char> >::at(...) returned 0xCD9CC6C4.
 

Как я могу это исправить?

Комментарии:

1. text = text.at(i) = ''; Почему вы присваиваете значение, возвращаемое с помощью at to text ?

Ответ №1:

Эта строка:

 text = text.at(i) = '';
 

фактически то же самое, что

 text.at(i) = '';
text = '';
 

Последняя строка заменяет все содержимое строки text одним символом . text имеет 1 элемент now, и любой дальнейший доступ через at(i) него запрещен.

Комментарии:

1. Объявление отдельной переменной для хранения сокращенной строки избавляет от ошибки, но не дает требуемого результата, почему это?

2. @solopolo Вам нужно просмотреть, как std::string на самом деле работает. A std::string может содержать s в середине, вы не можете «изменить размер» a std::string подобным образом