上一主题下一主题
关键字
主题 : 关于C++中string的问题。
级别: 北风技术菜鸟


UID: 478715
精华: 0
发帖: 1518
威望: 5255 点
学点: 3337 点
贡献: 180 点
好评: 0 点
学币: 18 个
注册时间: 2014-07-23
最后登录: 2015-04-05
楼主  发表于: 2015-02-15 01:19||

关于C++中string的问题。

string a; 4 h}03 oG  
int i=0; x3./  
a='0'; T{9pNf-  
cout<<a<<endl; j$2rU'  
上面这个程序输出的是没有结果; &Z kY9XO  
string a; \0}!qG![AA  
int i=0; 977%9z<h  
a='0'; )Dg;W6  
a[i+1]='\0'; t r)[6o#  
cout<<a<<endl; Dt1v`T~=?  
改成这样子输出也是没有结果; />wM#)o2  
string a; ->BGeP_=|  
int i=0; CV9o,rL  
a="0"; X@ zw;Se  
cout<<a<<endl; }]dK26pX  
这样子才输出的0。 bn$('  
string不是也可以用来逐个操作字符吗,这种情况是为什么
此帖悬赏中(剩余时间:已结束)...
最佳答案: 2 学点
热心助人剩余点数: 1 学点
级别: 北风资深评论员


UID: 478710
精华: 0
发帖: 4520
威望: 6415 点
学点: 7638 点
贡献: 199 点
好评: 0 点
学币: 119 个
注册时间: 2014-07-23
最后登录: 2015-04-06
沙发(1楼)  发表于: 2015-02-15 01:21||

RTFM &eb8k2S  
http://www.cplusplus.com/reference/string/string/?kw=string N'CW Sf.e  
vSR5F9  
你应该看看resize方法...
级别: 北风资深评论员


UID: 478710
精华: 0
发帖: 4520
威望: 6415 点
学点: 7638 点
贡献: 199 点
好评: 0 点
学币: 119 个
注册时间: 2014-07-23
最后登录: 2015-04-06
板凳(2楼)  发表于: 2015-02-15 01:21||

前面两个操作是及其危险的。string a; 的a没有分配内存,直接用超出原有最大index值的subscripting 方式赋值在标准中为“未定义”,可能导致程序崩溃,或者buffer overflow,是禁止的行为。 Q>;Aq!mr=  
a="0";是一个拷贝操作,也是分配相应内存过程。所以才有输出。
级别: 北风资深评论员


UID: 478710
精华: 0
发帖: 4520
威望: 6415 点
学点: 7638 点
贡献: 199 点
好评: 0 点
学币: 119 个
注册时间: 2014-07-23
最后登录: 2015-04-06
地板(3楼)  发表于: 2015-02-15 01:21||

前两例string在定义后并没有指定****辟的大小,执行operator [] 时就不会返回对应空间的引用。 AW5g (  
在执行a = "0"的时候实际执行的是operator= 会完成对"a"的****,****辟内存空间。