C++ 'std::out_of_range' ошибка при преобразовании строки в массив символов
Итак, в основном я создаю программу, которая в определенные моменты должна отображать текст по одному символу за раз с интервалами между каждым символом. Я создал функцию, в которую я могу передать строку, которая должна медленно отображать строку по одному символу за раз. Единственная проблема заключается в том, что когда я беру каждый символ из строки, я получаю сообщение об ошибке -> "terminate вызывается после выброса экземпляра 'std::out_of_range'what(): basic_string::at"
Я пытался найти проблему довольно давно, и кажется, что весь другой код работает, но код, который помещает символ из строки в массив символов, который я создал, и я понятия не имею, как это исправить. Буду признателен за любую оказанную помощь.
Код:
std::string SlowText(std::string s)
{
int L = s.length();
char *Text;
Text = new char[L];
int c = L;
while(c > 0)
{
Text[c] = s.at(c);
--c;
}
c = L;
while(c > 0)
{
std::cout << Text[c];
Sleep(250);
--c;
}
return "";
}
1 ответ
Причина в том, что L
длина массива, и вы делаете это:
c = L;
из-за индексации 0 вы начинаете после конца строки. Попробуй это:
c = L-1;
Конечно, поскольку это C++, я расскажу вам стандартную вещь, которая не использует массивы! Ваш код может быть таким:
std::string SlowText(std::string s)
{
for (auto b = s.rend(), e = s.rbegin(); b != e; b++)
{
std::cout << *b << std::flush;
sleep(250)
}
return ""; //Also why have this?
}