問題是你從來沒有初始化_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,那是否打敗了目的? –
不會編譯如何?你收到什麼錯誤信息? –