konvertieren ein char * zu std :: string
Frage
Ich brauche einen std::string
zum Speichern von Daten, die von fgets()
abgerufen zu verwenden. dies Ich muß tun, um den char*
Rückgabewert von fgets()
in einen std::string
zum Speichern in einem Array konvertieren. Wie kann dies geschehen?
Lösung
std::string
hat einen Konstruktor für diese:
const char *s = "Hello, World!";
std::string str(s);
So stellen Sie sicher, dass Ihre char *
nicht NULL
ist, sonst ist das Verhalten nicht definiert.
Andere Tipps
Wenn Sie bereits Größe des char * kennen, verwenden Sie diese stattdessen
char* data = ...;
int size = ...;
std::string myString(data, size);
Dies ist nicht Strlen verwenden.
EDIT: Wenn String-Variable bereits vorhanden ist, Verwendung assign ():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Ich muss Verwendung std :: string zu speichernden Daten von fgets () abgerufen.
Warum fgets()
verwenden, wenn Sie C ++ programmieren? Warum nicht std::getline()
?
Die meisten Antworten spricht über Konstruktion std::string
.
Wenn bereits aufgebaut, nur Verwendung Zuweisungsoperator .
std::string oString;
char* pStr;
... // Here allocate and get character string (e.g. using fgets as you mentioned)
oString = pStr; // This is it! It copies contents from pStr to oString
Direkt in durch den Konstruktor:
const char* dat = "my string!";
std::string my_string( dat );
Sie können die Funktion string.c_str () verwenden, den anderen Weg zu gehen:
std::string my_string("testing!");
const char* dat = my_string.c_str();
const char* charPointer = "Hello, World!\n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
Ich mag eine neue Methode erwähnen, die den Benutzer verwendet wörtlichen s
definiert. Das ist nicht neu, aber es wird häufiger, weil es in der C ++ 14 Standardbibliothek hinzugefügt wurde.
Weitgehend überflüssig im allgemeinen Fall:
string mystring = "your string here"s;
Aber es erlaubt Ihnen, Auto zu benutzen, auch mit Wide-Strings:
auto mystring = U"your UTF-32 string here"s;
Und hier ist, wo es wirklich glänzt:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);
Nicht sicher, warum niemand außer Erik dies erwähnt, aber nach dieser Seite , funktioniert der Zuweisungsoperator nur in Ordnung. Keine Notwendigkeit zu verwenden, um einen Konstruktor, .assign () oder .append ().
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
Ich habe zu kämpfen gerade mit MSVC2005 den std::string(char*)
Konstruktor zu verwenden, ebenso wie die top-rated Antwort. Als ich diese Variante sehen aufgelistet als # 4 auf immer vertrauenswürdige http: // en. cppreference.com/w/cpp/string/basic_string/basic_string , Figur, die ich noch einen alten Compiler bietet dies.
Es hat mich so lange zu realize genommen, dass dieser Konstruktor absolute weigert sich, mit (unsigned char*)
als Argument entsprechen! Ich habe diese unverständlichen Fehlermeldungen über das Scheitern mit std::string
Argumente Typ übereinstimmen, das war definitiv nicht das, was ich strebe. Gerade Gießen das Argument mit std::string((char*)ucharPtr)
mein Problem gelöst ... duh!