扫码关注官方订阅号
string a; int i=0; a[i]='0'; cout<
前两例string在定义后并没有指定开辟的大小,执行operator [] 时就不会返回对应空间的引用。 在执行a = "0"的时候实际执行的是operator= 会完成对"a"的复制,开辟内存空间。
RTFMhttp://www.cplusplus.com/reference/string/string/?kw=string
你应该看看resize方法...
前面两个操作是及其危险的。string a; 的a没有分配内存,直接用超出原有最大index值的subscripting 方式赋值在标准中为“未定义”,可能导致程序崩溃,或者buffer overflow,是禁止的行为。 a="0";是一个拷贝操作,也是分配相应内存过程。所以才有输出。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
前两例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";是一个拷贝操作,也是分配相应内存过程。所以才有输出。