我几乎从不使用c ++字符串类型,但我需要使用一组字符串,因此我认为它们是最好的选择。
我这样编码:
string a;
a[0] = 'b';
printf("%s", a.c_str());
然后印上字母“ b”
但是当我尝试:
string a;
// i bellow would be a number from 0 to 9, so I add 48 to get the correspondent char
a[0] = 48 + i;
printf("%s", a.c_str());
它没有打印一位数字...
我的问题是:是否仅由于幸运的未定义行为而在第一种情况下正确打印了“ b”?
我之所以这样问是因为,如果我在位置0上已经有东西,那么分配a [0] = 48 + i; 可以正确打印该号码。
字符串是一个动态数组,因此您无法调用内存的未定义部分。调用
string a; a[0] = 'b'; printf("%s", a.c_str());
非常危险,因为您已经访问了内存的其他部分并覆盖了它。我想您的程序将在程序的其他部分引发错误。看看你做了什么:
string a; a[0] = 'b'; printf("%d ", a.size());
输出当然是0
。
您必须先保留内存,例如:a.resize(10)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句