C++ 正在引发未处理的异常的子字符串()

C++ 正在引发未处理的异常的子字符串(),c++,substr,size-t,C++,Substr,Size T,我正在尝试制作一个简单的程序,帮助用户快速学习打字。它会打印一个字符,用户应该快速按下它以“赢” 我收到一个运行时错误: < >在0x72A2D2中未处理的异常,在学习QuasyLy.EXE:微软C++异常:STD::OutOx在内存位置0x00 FEF138范围内。发生 这是我的密码: #include <iostream> #include <ctime> #include <cstdlib> #include <string.h> using

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

我收到一个运行时错误:

< >在0x72A2D2中未处理的异常,在学习QuasyLy.EXE:微软C++异常:STD::OutOx在内存位置0x00 FEF138范围内。发生

这是我的密码:

#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;
    }
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
srand((无符号)时间(NULL));
while(true)
{
int r=rand()%26;
字符串长度=“abcdefghijklmnopqrstuvxyz”;
找到的尺寸=r;
尺寸_t sz=1;
string sub=length.substr(长度.at(找到的),sz);
cout将一个索引作为输入,但您正在传入一个从给定索引检索的字符。该字符的值被误解为索引,并且字符串中的所有字符的(97..122)都高于字符串(26)的
size()
,因此
substr()
抛出
std::超出范围的异常:

例外情况

std::超出范围
if
pos>size()

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

//string sub=length.substr(length.at(found),sz);
string sub=length.substr(已找到,sz);
删除使用
at()
substr
需要的是位置,而不是字符。at()返回该位置字符的字符值,该值大于字符串的大小。因此出现异常。