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 "";
}

0

Решение

Причина в том, что 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?
}
2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector