Das Konvertieren von c++ std string in C-Style-String ist jetzt wirklich einfach.
Dafür haben wir die string::copy
Funktion, die den std string einfach in einen C-Style-String umwandelt. Referenz
string::copy
Funktionenparameter seriell
- Zeiger auf Zeichenfolge
- Zeichenfolgenlänge, wie viele Zeichen kopiert werden sollen
- Position, ab der die Zeichenkopie starten wird
Etwas anderes Wichtiges,
Diese Funktion fügt am Ende des Vorgangs kein Nullzeichen an. Daher müssen wir es manuell einfügen.
Der Codebeispiel ist unten aufgeführt -
// C-Style-String
char chText[20];
// c++-String
string text = "Ich bin ein Programmierer";
// Konvertierung von c++-String in C-Style-String
// Diese Funktion fügt am Ende des Vorgangs kein Nullzeichen an
text.copy(chText, text.size(), 0);
// Wir müssen es manuell hinzufügen
chText[text.size()] = '\0';
// Die unten stehende Anweisung gibt "Ich bin ein Programmierer" aus
cout << chText << endl;
Umgekehrt, Das Konvertieren von C-Style-String in C++ std string ist viel einfacher
Es gibt drei Möglichkeiten, wie wir von C-Style-String in C++ std string konvertieren können
Die Erste ist die Verwendung des Konstruktors,
char chText[20] = "Ich bin ein Programmierer";
// Verwendung des Konstruktors
string text(chText);
Die Zweite ist die Verwendung der string::assign
Methode
// C-Style-String
char chText[20] = "Ich bin ein Programmierer";
// c++-String
string text;
// Konvertierung von C-Style-String in c++-String
// Verwendung der assign-Funktion
text.assign(chText);
Die Dritte ist der Zuweisungsoperator(=), bei dem die String-Klasse Operatorüberladung verwendet
// C-Style-String
char chText[20] = "Ich bin ein Programmierer";
// c++-String
// Konvertierung von C-Style-String in c++-String unter Verwendung von Operatorüberladung der Zuweisung
string text = chText;
Drittes kann auch wie folgt geschrieben werden -
// C-Style-String
char chText[20] = "Ich bin ein Programmierer";
// c++-String
string text;
// Konvertierung von C-Style-String in c++-String
text = chText;
2 Stimmen
Anstatt: char * writable = new char[str.size() + 1]; Sie können char writable[str.size() + 1]; verwenden. Dann brauchen Sie sich keine Gedanken über das Löschen von beschreibbar oder die Ausnahmebehandlung zu machen.
13 Stimmen
Du kannst str.size() nicht verwenden, es sei denn, die Größe ist zur Kompilierzeit bekannt. Außerdem könnte es deinen Stapel überlaufen, wenn der feste Größenwert riesig ist.
1 Stimmen
Char* result = strcpy((char*)malloc(str.length()+1), str.c_str());
10 Stimmen
@cegprakash
strcpy
undmalloc
sind nicht wirklich der C++-Weg.0 Stimmen
@boycy: Meinst du, dass sie imaginär sind?
8 Stimmen
Nein, aber
char* dest = new char[str.length() + 1]; std::copy(str.begin(), str.end(), dest)
wäre idiomatischeres C++.strcpy()
undmalloc()
sind nicht falsch oder problematisch, aber es scheint inkonsistent zu sein, eine C++-Zeichenkette und C-Bibliothekseinrichtungen mit C++-Äquivalenten im selben Codeblock zu verwenden.0 Stimmen
stringName.c_str()
solange es sich um einstd::string
,std::wstring
oder etwas Ähnliches wie einwinrt::hstring
handelt.