convertir un char * std :: string
Pregunta
Necesito utilizar un std::string
para almacenar datos recuperados por fgets()
. Para ello necesito para convertir el valor de retorno de char*
fgets()
en un std::string
para almacenar en una matriz. ¿Cómo puede hacerse esto?
Solución
std::string
tiene un constructor para esto:
const char *s = "Hello, World!";
std::string str(s);
Sólo asegúrese de que su char *
no se NULL
, o bien el comportamiento no está definido.
Otros consejos
Si ya conoce el tamaño de la char *, utilizar esto en vez
char* data = ...;
int size = ...;
std::string myString(data, size);
Esto no utilizar strlen.
EDIT: Si ya existe una variable de cadena, el uso de asignación ():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
Necesito usar std :: string para almacenar datos recuperados por fgets ().
¿Por qué el uso de fgets()
cuando se está programando en C ++? ¿Por qué no std::getline()
?
La mayoría de las respuestas habla de construcción std::string
.
Si ya construido, sólo tiene que utilizar el operador de asignación .
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
Pase en a través del constructor:
const char* dat = "my string!";
std::string my_string( dat );
Puede utilizar el string.c_str () para ir a otro lado:
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;
Me gustaría hablar de un nuevo método que utiliza el usuario definido s
literal. Esto no es nuevo, pero va a ser más común, ya que se añadió en la biblioteca estándar de C ++ 14.
En gran parte superflua en el caso general:
string mystring = "your string here"s;
Sin embargo, permite el uso de automóviles, también con cuerdas anchas:
auto mystring = U"your UTF-32 string here"s;
Y aquí es donde realmente brilla:
string suffix;
cin >> suffix;
string mystring = "mystring"s + suffix;
char* data;
std::string myString(data);
No sé por qué nadie aparte de Erik mencionó esto, pero de acuerdo con esta página , el operador de asignación funciona bien. No es necesario utilizar un constructor, .assign (), o .Append ().
std::string mystring;
mystring = "This is a test!"; // Assign C string to std:string directly
std::cout << mystring << '\n';
He estado luchando con MSVC2005 a utilizar el constructor std::string(char*)
al igual que la respuesta de primer nivel. Como veo esta variante que aparece como # 4 en la confianza siempre- http: // en. cppreference.com/w/cpp/string/basic_string/basic_string , supongo que incluso un viejo compilador ofrece esto.
Se me ha llevado mucho tiempo para darse cuenta de que este constructor se niega absoluta para que coincida con (unsigned char*)
como argumento! Tengo estos mensajes de error incomprensibles sobre el fracaso para que coincida con std::string
tipo de argumento, lo que definitivamente no era lo que yo buscaba. Sólo fundición de la discusión con std::string((char*)ucharPtr)
resolvió mi problema ... duh!