我试图实现自定义String类的c_str()函数。它似乎工作,但由于某种原因它打印" ="在每个字符串的末尾:
const char* c_str()
{
char* temp = alloc.allocate(data.size() + 1);
uninitialized_copy(data.begin(), data.end(), temp);
temp[data.size()+1] = '\0';
return temp;
}
Str class的私有部分:
private:
Vec<char> data;
allocator<char> alloc;
* Vec基本上是矢量。
int main()
{
Str s1 = "Hello, beee";
cout << s1.c_str();
return 0;
}
我哪里错了?
答案 0 :(得分:2)
问题在于:
temp[data.size() + 1] = '\0';
char
数组分配给data.size() + 1
个字节,因此索引应该从0
到data.size()
。 temp[data.size() + 1]
刚刚超出数组边界。此代码也可能导致未定义的行为。
应该是
temp[data.size()] = '\0';
答案 1 :(得分:1)
您正在使用阵列边界的位置。数组的索引从0开始计算,因此最后一个元素的索引应为sizeof(array) - 1
。
temp[data.size()+1] = '\0';
应为temp[data.size()] = '\0';