2017-03-08 7 views
-2

Donc j'essaie de concaténer deux tableaux de caractères, et de les retourner dans un opérateur surchargé. Cependant strcat est déprécié et ne compilera pas et quelqu'un m'a dit que strcat_s est spécifique à l'os. Des idées sur la façon de concaténer ces deux gars ???en utilisant strcat pour concaténer un tableau de caractères

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

Eh bien, sur toute plate-forme, vous pouvez utiliser strcat, et sur Windows, vous pouvez utiliser strcat_s si vous voulez, ou vous pouvez simplement utiliser strcat et ignorer l'avertissement ou désactiver l'avertissement. Votre code a d'autres bugs cependant. – immibis

+0

Eh bien, si j'utilise strcat est-ce que cela va à l'encontre du but? –

+1

Ne compilera pas comment? Quel message d'erreur obtenez-vous? –

Répondre

-2

Le problème est que vous ne _data initialisé. Le premier argument à strcat() doit être une chaîne terminée par un caractère nul, mais vous lui donnez un tableau non initialisé.

Pour copier la première chaîne, utilisez strcpy(), non 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; 
} 

Ou vous pouvez initialiser _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; 
} 

Ou vous pourriez puisque vous avez utiliser l'arithmétique et memcpy adresse, les tailles .

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

OK bien j'étais juste incertain de la dépriciation de strcat. Aussi je me demandais si peut-être l'arithmétique du pointeur serait mieux ici –

+0

Vous pourriez utiliser l'arithmétique du pointeur et 'strncpy()'. – Barmar

+0

'nouveau' vraiment? Ne pas utiliser un pointeur intelligent au moins ?? Qu'est-ce que cela aide? Je dois prendre des jours, des semaines, des mois pour que ce nouvel ingénieur se démène pour être productif. –