2017-03-08 3 views
-2

So versuche ich zwei Zeichen-Arrays verketten und sie in einem überladenen Operator zurückgeben. Allerdings strcat ist abgeschrieben und wird nicht kompiliert und jemand sagte mir strcat_s ist os spezifisch. Irgendwelche Ideen, wie man diese zwei Leute verkettet ???Verwenden von strcat zum Verketten eines Array von Zeichen

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

Nun, auf jeder Plattform können Sie strcat verwenden und unter Windows können Sie strcat_s verwenden, wenn Sie wollen, oder Sie können nur strcat verwenden und die Warnung ignorieren oder die Warnung abzuschalten. Ihr Code hat jedoch andere Fehler. – immibis

+0

Nun, wenn ich strcat benutze das den Zweck besiegen? –

+1

Kompiliert nicht wie? Welche Fehlermeldung erhalten Sie? –

Antwort

-2

Das Problem ist, dass Sie nie _data initialisiert haben. Das erste Argument zu strcat() muss eine Null-terminierte Zeichenfolge sein, aber Sie geben es ein nicht initialisiertes Array.

den ersten String zu kopieren, verwenden strcpy(), nicht 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; 
} 

Oder Sie könnten _data initialisieren:

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; 
} 

Oder Sie könnten Adreßarithmetik und memcpy verwenden, da Sie die Größen haben .

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 gut ich war nur unsicher über die Entfernung von strcat. Auch ich fragte mich, ob vielleicht Zeiger arithmatic würde hier besser sein –

+0

Sie könnten Zeigerarithmetik und 'strncpy()' verwenden. – Barmar

+0

'neu' wirklich? Nicht mit einem intelligenten Zeiger mindestens ?? Was hilft das? Ich muss Tage, Wochen, Monate brauchen, bis der neue Ingenieur in Form gekommen ist, um produktiv zu sein. –

Verwandte Themen