从strcpy_s获取“ L缓冲区太小&& 0”错误-尝试制作重载+运算符

时间:2019-03-02 01:03:19

标签: c++ class strcpy

我正在尝试编写一个简单的字符串类版本(用于实践),并且除了重载的+运算符之外,我都能正常工作。

“ strcpy_s(temp,strlen(stringPtr)+ 1,stringPtr);”​​行不断引发异常。我认为strcat_s也会。

有什么建议吗?

MyString MyString::operator+(const MyString & other)
{
    if (this != &other)
    {

        char * temp = new char[strlen(stringPtr) + strlen(other.stringPtr) + 1];
        strcpy_s(temp, strlen(stringPtr) + 1, stringPtr);
        strcat_s(temp, strlen(other.stringPtr) + 1, other.stringPtr);

        delete[]stringPtr;
        stringPtr = temp;

        delete[]temp;

    }
    return this->stringPtr;
}

如果有帮助,则将stringPtr传递给“ bob”,将other.stringPtr传递给“ sally”。

1 个答案:

答案 0 :(得分:1)

您应该将相同的大小传递给两个函数。

MyString MyString::operator+(const MyString & other)
{
    size_t newSize = strlen(stringPtr) + strlen(other.stringPtr) + 1;
    char * temp = new char[newSize];
    temp[0] = 0;
    strcpy_s(temp, newSize, stringPtr);
    strcat_s(temp, newSize, other.stringPtr);

    //I'm assuming your constructor makes a copy.....    
    MyString ret(temp);
    delete[] temp;
    return ret;
}

您可以查看this以获得更多有关实现某些运算符的更好方法的信息。例如,operator+通常是根据operator+=来实现的。