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?

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top