关于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不是也可以用来逐个操作字符吗,这种情况是为什么
阅读 3.7k
3 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题