Alternative von strcpy in C ++

8

In C habe ich strcpy verwendet, um eine tiefe Kopie einer Zeichenkette zu erstellen, aber es ist immer noch 'fein' , strcpy in C ++ zu verwenden oder dort zu existieren bessere Alternativen, die ich stattdessen verwenden sollte?

    
Aerus 20.01.2011, 19:14
quelle

4 Antworten

14

In C ++ ist es am einfachsten, die Klasse std :: string anstelle von char * zu verwenden.

%Vor%

Die Zeile "b = a;" macht dasselbe, was Sie normalerweise mit strcpy tun würden.

    
kynnysmatto 20.01.2011, 19:17
quelle
16

Ich habe dies in den obigen Kommentar eingefügt, aber um den Code lesbar zu machen:

%Vor%

Wenn Sie also das Verhalten von strcpy tatsächlich nachahmen möchten, müssen Sie es mit c_str() ;

kopieren

AKTUALISIEREN

Es sollte beachtet werden, dass der C ++ 11-Standard explizit das gemeinsame Kopieren-beim-Schreiben-Muster verbietet, das in vielen Implementierungen von std::string zuvor verwendet wurde. Reference-Count-Strings sind daher nicht mehr erlaubt und das folgende erzeugt eine Kopie:

%Vor%     
Zac Howland 20.01.2011 19:31
quelle
4

Wenn Sie C ++ - Zeichenfolgen verwenden, verwenden Sie einfach den Kopierkonstruktor:

%Vor%

des Zuweisungsoperators

%Vor%

Wenn Sie C-Style-Strings verwenden müssen (d. h. nullterminierte Char-Arrays), dann verwenden Sie einfach strcpy oder als sicherere Alternative strncpy.

    
SuperElectric 20.01.2011 19:20
quelle
2

Sie werden empfohlen, strcpy_s zu verwenden, da zusätzlich zu den Ziel- und Quellargumenten ein zusätzliches Argument für die Größe des Zielpuffers vorhanden ist, um einen Überlauf zu vermeiden. Dies ist jedoch immer noch der schnellste Weg, um eine Zeichenkette zu kopieren, wenn Sie char-Arrays / -Zeiger verwenden.

Beispiel:

%Vor%     
Nick Banks 20.01.2011 19:21
quelle

Tags und Links