C++ 正在引发未处理的异常的子字符串()
我正在尝试制作一个简单的程序,帮助用户快速学习打字。它会打印一个字符,用户应该快速按下它以“赢” 我收到一个运行时错误: < >在0x72A2D2中未处理的异常,在学习QuasyLy.EXE:微软C++异常:STD::OutOx在内存位置0x00 FEF138范围内。发生 这是我的密码: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
#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::超出范围ifpos>size()
调用substr()
时,需要将length.at(found)
替换为justfound
:
//string sub=length.substr(length.at(found),sz);
string sub=length.substr(已找到,sz);
删除使用at()
substr
需要的是位置,而不是字符。at()返回该位置字符的字符值,该值大于字符串的大小。因此出现异常。