c++运行错误: string subscript out of range

问题来源: B组  PAT1057  PAT1079

两个样例:

PAT1057:

//char two[10000];
//string two = new string[100];
string two;
int i = 0;
while (sum != 0) {
		two[i++] = sum % 2 + '0';
		sum /= 2;
}

PAT1079:

string s;
int up = 0;
int sum = 0;
int k = 0;
for (int i = s1.size() - 1; i >= 0; i--) {
	sum = s1[i] - '0' + s2[i] - '0';
	//运行时报错: string subscript out of range
	s[k++]=((sum + up) % 10 + '0');
	up = (sum + up) / 10;
}

相关资料:

查阅后,细看了这个链接,初步解决问题:(7条消息) c++程序运行时出现string subscript out of range--CSDN问答

总结与思考:

1.string subscript out of range: 即字符串边界溢出

溢出:  对string s未初始化,如果要对s进行操作,需对s进行初始化,给其分配相应的存储空间

初始化: 为string变量分配内存空间  (没有空间,谈何操作)

通俗解释: 存在string s的空间大小在访问下标为k=0的数组元素时,都无法正常访问的可能性

2.string是动态分配类型,问题转为: 动态分配类型变量未初始强行以下标形式访问元素

首先,明确string的动态分配不是根据下标分配,而是所储存的数据大小

而,下标访问操作是动态分配的空间大小确定后才能进行的操作

插入内容: 动态内存类型可以根据插入内容的大小调控其空间

string虽然是动态内存,但不会自动分配所需空间,如果未对string插入内容,下标访问操作就

会报错,故需要先让string分配到所需大小的空间

3.string动态分配内存的三种方式

1. insert函数           2. +=           3. ="    "

4.对小标题2也可以这么理解

string s;
char c;
s.insert(c);
s+=c;
s="动态分配内存的三种方式";

代码块内的三种操作先有赋值(插入)操作(的意图), 后根据赋值(插入)大小动态调控空间, 最后输入值成功插入(访问)刚分配的空间

而,下面的代码:

#define MAX 100
string s;  
char c;
for(int i=0;i<MAX;i++){
   s[i]=c;
}

先去访问下标为i的位置的空间, 然后向该空间进行赋值操作, 但因为s未初始化,下标i对应的空间自然没有被分配, 导致赋值操作无法正常进行, 即没有空间去放置输入的元素, 发生溢出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值