首页 > 关于C++中string的问题。

关于C++中string的问题。

string a;
int i=0;
a[i]='0';
cout<<a<<endl;
上面这个程序输出的是没有结果;
string a;
int i=0;
a[i]='0';
a[i+1]='\0';
cout<<a<<endl;
改成这样子输出也是没有结果;
string a;
int i=0;
a="0";
cout<<a<<endl;
这样子才输出的0。
string不是也可以用来逐个操作字符吗,这种情况是为什么

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


RTFM
http://www.cplusplus.com/reference/string/string/?kw=string

你应该看看resize方法...


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

【热门文章】
【热门文章】