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?

War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top