c++ - library - convertir un char*a std:: string
string c++ library (11)
Necesito usar std :: string para almacenar los datos recuperados por fgets ().
¿Por qué usar fgets()
cuando estás programando C ++? ¿Por qué no std::getline()
?
Necesito usar una std::string
para almacenar los datos recuperados por fgets()
. Para hacer esto, necesito convertir el valor de retorno de char*
de fgets()
en un std::string
para almacenar en una matriz. ¿Cómo se puede hacer esto?
Acabo de estar luchando con MSVC2005 para usar el constructor std::string(char*)
como la respuesta más calificada. Como veo esta variante enumerada como # 4 en http://en.cppreference.com/w/cpp/string/basic_string/basic_string , siempre confiado, me imagino que incluso un compilador antiguo ofrece esto.
¡Me ha costado tanto darme cuenta de que este constructor absoluto se niega a coincidir con (unsigned char*)
como argumento! Recibí estos incomprensibles mensajes de error sobre la falta de coincidencia con el tipo de argumento std::string
, que definitivamente no era lo que buscaba. El solo hecho de lanzar el argumento con std::string((char*)ucharPtr)
resolvió mi problema ... ¡duh!
La mayoría de las respuestas hablan de construir std::string
.
Si ya está construido, simplemente use 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
Me gustaría mencionar un nuevo método que utiliza los literales definidos por el usuario. Esto no es nuevo, pero será más común porque se agregó en la biblioteca estándar de C ++ 14.
En gran parte superfluo en el caso general:
string mystring = "your string here"s;
Pero te permite usar auto, 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;
No estoy seguro de por qué nadie además de Erik lo mencionó, 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'';
Pásalo a través del constructor:
const char* dat = "my string!";
std::string my_string( dat );
Puedes usar la función string.c_str () para ir por el otro lado:
std::string my_string("testing!");
const char* dat = my_string.c_str();
Si ya sabes el tamaño del char *, usa esto en su lugar
char* data = ...;
int size = ...;
std::string myString(data, size);
Esto no utilizar strlen.
EDITAR: Si la variable de cadena ya existe, use assign ():
std::string myString;
char* data = ...;
int size = ...;
myString.assign(data, size);
std::string
tiene un constructor para esto:
const char *s = "Hello, World!";
std::string str(s);
Solo asegúrate de que tu char *
no sea NULL
, o el comportamiento no está definido.
char* data;
std::string myString(data);
char* data;
stringstream myStreamString;
myStreamString << data;
string myString = myStreamString.str();
cout << myString << endl;
const char* charPointer = "Hello, World!/n";
std::string strFromChar;
strFromChar.append(charPointer);
std::cout<<strFromChar<<std::endl;