Pammer 发表于 2020-4-1 13:21

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”

hebkljk 发表于 2020-4-1 13:32

表达式:字符串下标超出范围

hebkljk 发表于 2020-4-1 13:33

表达式:字符串下标超出范围
subscript out of range 下标越界 原因有(1)数组索引超出范围;(2)下标超出范围;(3)下标范围不够。

串下标超限。 通常导致的原因是你定义的数组比如 string1(20),只允许有20个值,但在实际赋值过程中超过了20个值,就会导致下标超限。

可仔细检查程序中的赋值语句,必要时可以用单步检测,看看到底赋值中发生了什么情况。

yourGrace 发表于 2020-4-1 13:34

c++ string 无参数初始化后,size是0, 不能用下标添加, str = ... 这里改为str.push_back();

JuncoJet 发表于 2020-4-1 13:35

string 不是这么用的
你这用法,不如写 char str;
正儿八百的C++的话,用sstream

qianmo2001 发表于 2020-4-1 13:40

下标越界

hebkljk 发表于 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;
}

Pammer 发表于 2020-4-1 13:40

yourGrace 发表于 2020-4-1 13:34
c++ string 无参数初始化后,size是0, 不能用下标添加, str = ... 这里改为str.push_back();

谢谢,成功了

古月不傲 发表于 2020-4-1 13:47

用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]
查看完整版本: C++取随机字符报错