上一主题下一主题
关键字
主题 : 关于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; HP}d`C5<R  
int i=0; PJA%aRP,:  
a='0'; 5(R ./  
cout<<a<<endl; '!>LF1W=  
上面这个程序输出的是没有结果; }SIUsh'  
string a; g)c<\%  
int i=0;  3=@94i  
a='0'; *^e06xc:  
a[i+1]='\0'; )F Q '^  
cout<<a<<endl; ^vPM\qP#g  
改成这样子输出也是没有结果; Ea#wtow|-  
string a; dr#g[}l'H  
int i=0; pT\>kqmj  
a="0"; s 4uZ;  
cout<<a<<endl; K;Qlg{v  
这样子才输出的0。 oh c/{D2  
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 `/+PZqdC  
http://www.cplusplus.com/reference/string/string/?kw=string QP={b+8  
D/<;9hw  
你应该看看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,是禁止的行为。  Hq h  
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 [] 时就不会返回对应空间的引用。 O?8G  
在执行a = "0"的时候实际执行的是operator= 会完成对"a"的****,****辟内存空间。