关于string的小疑点求解
关于string的小问题求解代码:string s1s1[2] acouts1 //什么都没有// 上面的s1[2]应该是越界访问
关于string的小问题求解
代码:
string s1;
s1[2] = 'a';
cout<<s1; //什么都没有
// 上面的s1[2]应该是越界访问,如果要自动扩容怎么做?
string s2;
cin>>s2;
cout<<s2;//自动扩展,一年输出是输入的值
//cin输入为什么能自动扩容??
[解决办法]s1[2] = 'a'
这里的=不会重新申请内存,这是一个危险的行为,有可能破坏string内部的结构
默认的string有15还是16(不同的实现)的容量,用s1.capacity()查看
所以s1[2]还是在这个范围内,类似内存中的垃圾值,对string没意义。因为s1.size()打印出来的是0,
如果是s1[17]之类的,就可能破坏string对象。
[解决办法]string 可以自动扩容,不过语法是
s+= s0;
s+=ch;
这种
s[n+1]=ch,这种不好用,也没有必要.
因为,你要自己定义,而不是有现成的方案,决定扩容的方式,和扩容后,如何显示增加的那部分数据,
以及,那些从来,都没有赋值的数据,应该如何处理.
比如
s = "abcd"
s[10]="g";
s=???????
"abcd\0????g?" ?????
g前面那些问号该填充什么?????
g后面要不要结束符\0?????
d 后面那个结束符该怎么处理??????
你会发现,无论如何处理都不会令人满意!!!!!