c_str()自定义实现/" ="在每个字符串的末尾

时间:2015-07-10 02:50:05

标签: c++

我试图实现自定义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;
}

我哪里错了?

2 个答案:

答案 0 :(得分:2)

问题在于:

temp[data.size() + 1] = '\0';

char数组分配给data.size() + 1个字节,因此索引应该从0data.size()temp[data.size() + 1]刚刚超出数组边界。此代码也可能导致未定义的行为。

应该是

temp[data.size()] = '\0';

答案 1 :(得分:1)

您正在使用阵列边界的位置。数组的索引从0开始计算,因此最后一个元素的索引应为sizeof(array) - 1

temp[data.size()+1] = '\0';应为temp[data.size()] = '\0';