我正在尝试制作一个简单的程序来帮助用户学习快速打字。它会打印一个字符,用户应快速按下该字符以“赢”。
我遇到运行时错误:
“学习快速键入”中的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;
}
}
答案 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);