2017-03-08 122 views
-2

所以我想連接兩個字符數組,然後在重載的操作符中返回它們。然而,strcat是折舊的,不會編譯,有人告訴我strcat_s是os特定的。任何想法如何連接這兩個傢伙?使用strcat連接字符數組

MyString operator+(MyString lhs, MyString rhs) 
{ 

MyString m3(lhs._size + rhs._size + 1); 
strcat(m3._data, lhs._data); 
strcat(m3._data, rhs._data); 
return m3; 


} 
+0

那麼,在任何平臺上你都可以使用strcat,並且在Windows上你可以使用strcat_s,或者你可以使用strcat並忽略警告或者禁用警告。你的代碼有其他的錯誤。 – immibis

+0

那麼,如果我使用strcat,那是否打敗了目的? –

+1

不會編譯如何?你收到什麼錯誤信息? –

回答

-2

問題是你從來沒有初始化_datastrcat()的第一個參數必須是以空字符結尾的字符串,但是您要給它一個未初始化的數組。

要複製的第一個字符串,使用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; 
} 
+0

好吧,我只是不確定strcat的depriciation。另外我想知道在這裏指針算術可能會更好 –

+0

您可以使用指針算術和'strncpy()'。 – Barmar

+0

'new'真的嗎?至少不使用智能指針?這有什麼幫助?我必須花上幾天,幾周甚至幾個月的時間,才能感覺到新工程師在形狀上變得有生產力。 –