substring()抛出未处理的异常

时间:2019-06-21 22:42:26

标签: c++ substr size-t

我正在尝试制作一个简单的程序来帮助用户学习快速打字。它会打印一个字符,用户应快速按下该字符以“赢”。

我遇到运行时错误:

  

“学习快速键入”中的0x772A33D2处未处理的异常:Microsoft C ++异常:内存位置0x00FEF138的std :: out_of_range。发生

这是我的代码:

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string.h>
using namespace std;
int main()
{
    srand((unsigned)time(NULL));
    while (true)
    {
        int r = rand() % 26;
        string length = "abcdefghijklmnopqrstuvwxyz";
        size_t found = r;
        size_t sz = 1;
        string sub = length.substr(length.at(found),sz);
        cout << sub << endl;
    }
}

1 个答案:

答案 0 :(得分:2)

std::string::substr()索引作为输入,但是您传入的是从给定索引中检索到的字符。该字符的值被误解作为索引,并且您字符串中的所有字符的numeric values(97..122)都比size()高。您的字符串(26),因此substr()引发std::out_of_range异常:

  

例外

     

std::out_of_range,如果pos > size()

调用substr()时,只需将length.at(found)替换为found

//string sub = length.substr(length.at(found),sz);
string sub = length.substr(found,sz);