上一主题下一主题
关键字
主题 : 关于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; [{6&.v  
int i=0; C!aX45eg  
a='0'; ;n yB  
cout<<a<<endl; uKLOh<oio  
上面这个程序输出的是没有结果;  jK ?  
string a; ?TL2'U| M  
int i=0; x]yHBc  
a='0'; rXHHD#\oF  
a[i+1]='\0'; UiGUaBmF*  
cout<<a<<endl; a}^!TC>%1i  
改成这样子输出也是没有结果; &(z8GYBr  
string a; :kf3_?9rc  
int i=0; ,iA2s i  
a="0"; 1CF 7  
cout<<a<<endl; rsIt~w  
这样子才输出的0。 N7j]yvE  
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 !7|9r$  
http://www.cplusplus.com/reference/string/string/?kw=string ~Dh}E9E:  
2?&ptN) `N  
你应该看看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,是禁止的行为。 >I+O@  
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 [] 时就不会返回对应空间的引用。 zfL$z,zgf  
在执行a = "0"的时候实际执行的是operator= 会完成对"a"的****,****辟内存空间。