Ich muss zwei konstante Zeichen wie diese verketten:
const char *one = "Hello ";
const char *two = "World";
Wie könnte ich das machen?
Ich habe diese char*
s von einer Drittanbieter-Bibliothek mit einer C-Schnittstelle erhalten, sodass ich sie nicht einfach verwenden kann std::string
.
c++
c
string-concatenation
Anthoni Caldwell
quelle
quelle
strcpy
undstrcat
Aufrufe. Ich dachte, dass es sinnvoll ist, die Tags zu ändern.Antworten:
In Ihrem Beispiel sind eins und zwei Zeichenzeiger, die auf Zeichenkonstanten zeigen. Sie können die Zeichenkonstanten, auf die diese Zeiger zeigen, nicht ändern. Also so etwas wie:
wird nicht funktionieren. Stattdessen sollten Sie eine separate Variable (char-Array) haben, um das Ergebnis zu speichern. Etwas wie das:
quelle
strcpy(one,two);
sollte seinstrcat(one,two);
(nicht das , was es richtig macht, wie Sie richtig hervorheben).sprintf(dest,"%s%s",one,two)
und vergessen Sie die Kopie?Der C-Weg:
Der C ++ Weg:
Die Art der Kompilierung:
quelle
Wenn Sie C ++ verwenden, warum verwenden Sie keine
std::string
Zeichenfolgen im C-Stil?Wenn Sie diesen String an eine C-Funktion übergeben müssen, übergeben Sie ihn einfach
three.c_str()
quelle
Verwenden von
std::string
:quelle
Aktualisiert: aus Leistungsgründen geändert
string total = string(one) + string(two);
instring total( string(one) + two );
(vermeidet die Erstellung von Zeichenfolge zwei und temporäre Zeichenfolgen insgesamt)quelle
Noch ein Beispiel:
Aber wenn Sie die C ++ - Standardbibliothek nicht ausdrücklich wollen oder nicht verwenden können, ist die Verwendung
std::string
wahrscheinlich sicherer.quelle
new
. Und wenn er es benutzen kann, sollte er es benutzenstd::string
, wie Sie sagen.Es scheint, als würden Sie C ++ mit einer C-Bibliothek verwenden und müssen daher damit arbeiten
const char *
.Ich schlage vor, diese zu verpacken
const char *
instd::string
:quelle
Zunächst müssen Sie einen dynamischen Speicherplatz erstellen. Dann können Sie einfach die beiden Zeichenfolgen einfügen. Oder Sie können die c ++ - Klasse "string" verwenden. Der C-Weg der alten Schule:
Neuer C ++ Weg
quelle
Wenn Sie die Größe der Zeichenfolgen nicht kennen, können Sie Folgendes tun:
quelle
Sie können verwenden
strstream
. Es ist formal veraltet, aber es ist immer noch ein großartiges Werkzeug, wenn Sie mit C-Strings arbeiten müssen, denke ich.Dies schreibt
one
und danntwo
in den Stream und fügt eine Beendigung\0
mit hinzustd::ends
. Für den Fall, dass beide Zeichenfolgen genau99
Zeichen schreiben könnten - so dass kein Platz mehr zum Schreiben übrig bleibt\0
- schreiben wir eines manuell an die letzte Position.quelle
streambuf
esostream
ist auch nicht allzu schwierig , eine eigene Direktionsausgabe in einen Zeichenpuffer zu schreiben, der mit verwendet wird.quelle
Verbinden von zwei konstanten Zeichenzeigern ohne Verwendung des Befehls strcpy bei der dynamischen Speicherzuweisung:
quelle