#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
totext
?
Ответ №1:
Эта строка:
text = text.at(i) = '';
фактически то же самое, что
text.at(i) = '';
text = '';
Последняя строка заменяет все содержимое строки text
одним символом
. text
имеет 1
элемент now, и любой дальнейший доступ через at(i)
него запрещен.
Комментарии:
1. Объявление отдельной переменной для хранения сокращенной строки избавляет от ошибки, но не дает требуемого результата, почему это?
2. @solopolo Вам нужно просмотреть, как
std::string
на самом деле работает. Astd::string
может содержатьs в середине, вы не можете «изменить размер» a
std::string
подобным образом