我几乎从不使用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;会正确打印数字。
答案 0 :(得分:1)
String是一个动态数组,因此您无法调用未定义的内存部分。呼唤中
string a;
a[0] = 'b';
printf("%s", a.c_str());
非常危险,因为你已经访问了内存的其他部分并覆盖了这一点。我想你的程序会在程序的其他部分抛出错误。看看你做了什么:
string a; a[0] = 'b'; printf("%d ", a.size());
输出当然是0
。
你必须在此之前保留记忆:a.resize(10)
答案 1 :(得分:-1)
如果这是平台相关的答案,请纠正我。我使用VS2012并且没有时间用gcc进行测试。
创建字符串之后, string s;
它分配一些初始内存。你可以看到它,
s.capacity();//For me it gets 15
它返回一些非零值(同样在VS2012中)。所以,拥有,
s[0] = 'b';
很有意义。
如果你尝试一下,
a[10000] = 'b';
它会使你的程序崩溃。
a [0] = 48 + i(0 <= i <= 9)的情况,我说这不应该是一个问题,除了它在你的单身之后打印一些乱码数字。