1088 Stimmen

Wie man einen std::string in const char* oder char* konvertiert

Wie kann ich einen std::string in einen char* oder ein const char* umwandeln?

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());

10voto

devsaw Punkte 989

Einfach das sehen:

string str1("stackoverflow");
const char * str2 = str1.c_str();

Jedoch beachten Sie, dass dies einen const char * zurückgibt.

Für ein char *, verwenden Sie strcpy, um es in ein anderes char-Array zu kopieren.

27 Stimmen

Hallo, was du gepostet hast, wurde bereits mehrmals mit weiteren Details in anderen Antworten auf die 5 Jahre alte Frage gesagt. Es ist in Ordnung, ältere Fragen zu beantworten, aber nur, wenn du neue Informationen hinzufügst. Andernfalls ist es nur Lärm.

10 Stimmen

Persönlich schätze ich die Einfachheit.

9voto

cegprakash Punkte 2595
char* ergebnis = strcpy((char*)malloc(str.length()+1), str.c_str());

2 Stimmen

Sieht schick aus, aber wirklich schwer zu verstehen... Einfach ist meiner Meinung nach das Beste

4 Stimmen

Strcpy(), malloc(), length() und c_str() sind grundlegende Funktionen und es gibt nichts Schwieriges daran. Einfach nur Speicher reservieren und kopieren.

6 Stimmen

Ja, die Funktionen sind einfach, aber du hast sie verdreht und verbogen, um auszusehen wie eine Schüssel Spaghetti oder eine Zeile von Frankensteins Monster :)

2voto

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

  1. Zeiger auf Zeichenfolge
  2. Zeichenfolgenlänge, wie viele Zeichen kopiert werden sollen
  3. 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;

0voto

Vineeth Peddi Punkte 156

Sagen wir, string str="Stapel";

1)String in char konvertieren*

  char* s_rw=&str[0]; 

Der obige char*(d.h. s_rw) ist lesbar und beschreibbar und zeigt auf die Basisadresse des Strings, der in char* konvertiert werden muss

2)String in const char konvertieren*

   const char* s_r=&str[0];

Der obige const char* (d.h. s_r) ist lesbar, aber nicht beschreibbar und zeigt auf die Basisadresse des Strings.

-4voto

anish Punkte 6040

Versuchen Sie dies

std::string s(reinterpret_cast(Data), Size);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X