2017-03-08 118 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'真的吗?至少不使用智能指针?这有什么帮助?我必须花上几天,几周甚至几个月的时间,才能感觉到新工程师在形状上变得有生产力。 –