Ich muss ein verwenden std::string
, um Daten zu speichern, die von abgerufen wurden fgets()
. Dazu muss ich den char*
Rückgabewert von fgets()
in in konvertieren std::string
, um ihn in einem Array zu speichern. Wie kann das gemacht werden?
262
str
ist nur ein Variablenname. Es könnte alles sein:S
,abc
,l
,I
,strHelloWorld
. Offensichtlich sind einige Entscheidungen besser als andere. Aber für dieses Beispielstr
ist das durchaus akzeptabel.Wenn Sie die Größe des Zeichens * bereits kennen, verwenden Sie diese stattdessen
Dies verwendet keine strlen.
BEARBEITEN: Wenn bereits eine Zeichenfolgenvariable vorhanden ist, verwenden Sie assign ():
quelle
Die meisten Antworten sprechen vom Konstruieren
std::string
.Wenn bereits erstellt, verwenden Sie einfach den Zuweisungsoperator .
quelle
Warum verwenden,
fgets()
wenn Sie C ++ programmieren? Warum nichtstd::getline()
?quelle
Geben Sie es durch den Konstruktor weiter:
Sie können die Funktion string.c_str () verwenden, um in die andere Richtung zu gehen:
quelle
c_str()
kehrt zurückconst char*
quelle
quelle
Ich möchte eine neue Methode erwähnen, die das benutzerdefinierte Literal verwendet
s
. Dies ist nicht neu, wird jedoch häufiger auftreten, da es in der C ++ 14-Standardbibliothek hinzugefügt wurde.Im allgemeinen Fall weitgehend überflüssig:
Sie können jedoch auch Auto verwenden, auch mit breiten Zeichenfolgen:
Und hier scheint es wirklich:
quelle
Ich habe gerade mit MSVC2005 gekämpft, um den
std::string(char*)
Konstruktor genau wie die am besten bewertete Antwort zu verwenden. Wie ich sehe, ist diese Variante unter http://en.cppreference.com/w/cpp/string/basic_string/basic_string als Nummer 4 aufgeführt ich, dass dies sogar ein alter Compiler anbietet.Es hat so lange gedauert, bis mir klar wurde, dass dieser Konstruktor absolut nicht
(unsigned char*)
als Argument übereinstimmt ! Ich habe diese unverständlichen Fehlermeldungen über die Nichtübereinstimmung mit demstd::string
Argumenttyp erhalten, was definitiv nicht das war, was ich anstrebte. Nur das Argument mit zu werfen,std::string((char*)ucharPtr)
löste mein Problem ... duh!quelle
quelle
data
bleibt nicht initialisiert (leer).Ich bin mir nicht sicher, warum niemand außer Erik dies erwähnt hat, aber laut dieser Seite funktioniert der Zuweisungsoperator einwandfrei. Sie müssen keinen Konstruktor, .assign () oder .append () verwenden.
quelle
=
(und+=
) stammten . Es scheint nicht mit solchen Literalen zu passieren, sondern nur mitchar*
Dingen. Die Frage, ob solche Berichte tatsächlich undicht sind , wird hier erörtert . Aber wenn ich die Zuordnung zumdestString = std::string(srcCharPtr);
Valgrind geändert habe, sind Leckberichte verschwunden. YMMV.Constructs an object of class basic_string and determines its initial string value from the array
. Es sagt Wert und nichts über Puffer oder Zeigerbesitz.