问题是你从来没有初始化_data
。 strcat()
的第一个参数必须是以空字符结尾的字符串,但是您要给它一个未初始化的数组。
要复制的第一个字符串,使用strcpy()
,不strcat()
:
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
strcpy(m3._data, lhs._data);
strcat(m3._data, rhs._data);
return m3;
}
或者你可以初始化_data
:
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
m3._data[0] = '\0';
strcat(m3._data, lhs._data);
strcat(m3._data, rhs._data);
return m3;
}
或者你可以使用地址算术和memcpy
,因为你有大小。
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
m3._data[m3._size] = '\0';
memcpy(m3._data, lhs._data, lhs._size);
memcpy(m3._data+lhs._size, rhs._data, rhs._size);
return m3;
}
那么,在任何平台上你都可以使用strcat,并且在Windows上你可以使用strcat_s,或者你可以使用strcat并忽略警告或者禁用警告。你的代码有其他的错误。 – immibis
那么,如果我使用strcat,那是否打败了目的? –
不会编译如何?你收到什么错误信息? –