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?

¿Fue útil?

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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top