我正在尝试编写一个简单的字符串类版本(用于实践),并且除了重载的+运算符之外,我都能正常工作。
“ 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”。
答案 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+=
来实现的。