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 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 a; 的a没有分配内存,直接用超出原有最大index值的subscripting 方式赋值在标准中为“未定义”,可能导致程序崩溃,或者buffer overflow,是禁止的行为。
a="0";是一个拷贝操作,也是分配相应内存过程。所以才有输出。
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
前两例string在定义后并没有指定开辟的大小,执行operator [] 时就不会返回对应空间的引用。
在执行a = "0"的时候实际执行的是operator= 会完成对"a"的复制,开辟内存空间。