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?
}
Другие вопросы по тегам