C++取随机字符报错
本帖最后由 Pammer 于 2020-4-1 13:40 编辑#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;
string str;
int main()
{
const int length = rand() % 15;
for (int i = 0; i < length; ++i)
str = rand() % 95 + 32;//ASCII码表前32和最后127字符不可见(127-32=95)
cout << str << endl;
return 0;
}
代码如上,报错怎么办?
显示“Expression: string subscript out of range” 表达式:字符串下标超出范围 表达式:字符串下标超出范围
subscript out of range 下标越界 原因有(1)数组索引超出范围;(2)下标超出范围;(3)下标范围不够。
串下标超限。 通常导致的原因是你定义的数组比如 string1(20),只允许有20个值,但在实际赋值过程中超过了20个值,就会导致下标超限。
可仔细检查程序中的赋值语句,必要时可以用单步检测,看看到底赋值中发生了什么情况。 c++ string 无参数初始化后,size是0, 不能用下标添加, str = ... 这里改为str.push_back(); string 不是这么用的
你这用法,不如写 char str;
正儿八百的C++的话,用sstream 下标越界 #include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;
string str;
int main()
{
const int length = rand() % 15;
for (int i = 0; i < length; ++i)
{str = rand() % 95 + 32;//ASCII码表前32和最后127字符不可见(127-32=95)
cout << str << endl;
}
return 0;
} yourGrace 发表于 2020-4-1 13:34
c++ string 无参数初始化后,size是0, 不能用下标添加, str = ... 这里改为str.push_back();
谢谢,成功了 用Release版本
#include<iostream>
#include<string>
#include<cstdlib>
#include<ctime>
using namespace std;
string str;
int main()
{
srand((unsigned)time(NULL));
const int length = rand() % 15;
for (int i = 0; i < length; ++i)
{
str = rand() % 95 + 32;//ASCII码表前32和最后127字符不可见(127-32=95)
}
cout << str.c_str() << endl;
system("pause");
return 0;
}
页:
[1]