上一主题下一主题
关键字
主题 : 关于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; ](O!6_'d  
int i=0; ycH=L8  
a='0'; U2h?l `nP  
cout<<a<<endl; a~{mRh  
上面这个程序输出的是没有结果; *f,EDSN1@d  
string a; K/08F|]a  
int i=0; tewC *%3V  
a='0'; ;Neld #%J  
a[i+1]='\0'; V a<L[8  
cout<<a<<endl; jy6% CSWQ  
改成这样子输出也是没有结果; 2r\ f!m'  
string a; g_-Y- .M  
int i=0; g }5lG z4  
a="0"; f BukrPsV  
cout<<a<<endl; JH5ckgdZ  
这样子才输出的0。 `n$pR8TZ_  
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 NkNFx<9T  
http://www.cplusplus.com/reference/string/string/?kw=string sUc[!S:/  
XHKLl?-  
你应该看看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,是禁止的行为。 |=EwZ mj-c  
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 [] 时就不会返回对应空间的引用。 F7L+bv   
在执行a = "0"的时候实际执行的是operator= 会完成对"a"的****,****辟内存空间。