convertire un carattere* in std::string
Domanda
Ho bisogno di usare un std::string
per memorizzare i dati recuperati da fgets()
.Per fare questo ho bisogno di convertire il file char*
restituire il valore da fgets()
in un std::string
per memorizzare in un array.Come si può fare?
Soluzione
std::string
ha un costruttore per questo:
const char *s = "Hello, World!";
std::string str(s);
Assicurati solo che il tuo char *
non lo è NULL
, oppure il comportamento non è definito.
Altri suggerimenti
Se si conosce già dimensioni del char *, utilizzare questo posto
char* data = ...;
int size = ...;
std::string myString(data, size);
Questo non fa uso di strlen.
EDIT: Se variabile stringa già esistente, uso assegnazione ():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Ho bisogno di usare std :: string per memorizzare i dati recuperati da fgets ().
Perché usare fgets()
durante la programmazione C ++? Perché non std::getline()
?
La maggior parte delle risposte parla di costruzione std::string
.
Se già costruito, utilizzare solo operatore di assegnazione .
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
Passate in tramite il costruttore:
const char* dat = "my string!";
std::string my_string( dat );
È possibile utilizzare la funzione string.c_str () per andare nella direzione opposta:
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;
Vorrei parlare di un nuovo metodo che utilizza l'utente definito s
letterale. Questo non è nuovo, ma sarà più comune perché è stato aggiunto nella libreria standard C ++ 14.
In gran parte superflua nel caso generale:
string mystring = "your string here"s;
Ma consente di utilizzare auto, anche con ampie stringhe:
auto mystring = U"your UTF-32 string here"s;
E qui è dove brilla davvero:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);
Non capisco perché nessuno oltre Erik parlato di questo, ma secondo questa pagina , l'operatore di assegnazione funziona bene. Non c'è bisogno di utilizzare un costruttore, .assign (), o .Append ().
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
Ho appena lottando con MSVC2005 per utilizzare il costruttore std::string(char*)
proprio come la risposta top-rated. Per come la vedo questa variante elencato come 4 ° posto sempre attendibile http: // it. cppreference.com/w/cpp/string/basic_string/basic_string , immagino anche un vecchio compilatore offre questa.
C'è voluto così tanto tempo per rendersi conto che questo costruttore si rifiuta in assoluto da abbinare con (unsigned char*)
come argomento! Ho avuto questi messaggi di errore incomprensibili di fallimento da abbinare con std::string
tipo di argomento, che non è stato sicuramente quello che stavo puntando. Basta lanciare l'argomento con std::string((char*)ucharPtr)
risolto il mio problema ... Duh!