Tengo un error en mi programa: "no se pudo convertir de cadena a char *". ¿Cómo realizo esta conversión?¿Cómo convierto una cadena en un char * en C++?
Respuesta
Si puede conformarse con un const char*
, sólo tiene que llamar al método c_str()
en él:
const char *mycharp = mystring.c_str();
Si realmente necesita un modificable char*
, tendrá que hacer una copia del búfer de la cadena. Un vector
es una forma ideal de manejar para el usuario:
std::vector<char> v(mystring.length() + 1);
std::strcpy(&v[0], mystring.c_str());
char* pc = &v[0];
invocación str.c_str()
para obtener un const char*
:
const char *pch = str.c_str();
Tenga en cuenta que la const char*
resultante sólo es válida hasta str
se cambia o destruidas.
Sin embargo, si usted realmente necesita un no const
, probablemente no debería utilizar std::string
, ya que no fue diseñado para permitir el cambio de sus datos subyacentes detrás de su espalda. Dicho esto, puede obtener un puntero a sus datos invocando &str[0]
o &*str.begin()
.
Lo feo de esto debería considerarse una característica. En C++ 98, std::string
ni siquiera es necesario almacenar sus datos en un bloque contiguo de memoria, por lo que podría explotar en su cara. Creo que ha cambiado, pero ni siquiera puedo recordar si esto fue para C++ 03 o la próxima próxima versión del estándar, C++ 1x.
Si necesita hacer esto, considere usar un std::vector<char>
en su lugar. Puede acceder a sus datos de la misma manera: &v[0]
o &*v.begin()
.
Utilice el método c_str()
en un objeto string
para obtener un puntero const char*
. Advertencia: El puntero devuelto ya no es válido si el objeto string
se modifica o se destruye.
std::string::c_str()
devuelve una cadena de caracteres con el mismo contenido que el objeto string
.
std::string str("Hello");
const char* cstr = str.c_str();
Desde quería ir desde una string
a un char*
(es decir, no un const char*
) se puede hacer esto, pero ten cuidado: hay dragones aquí:
string foo = "foo";
char* foo_c = &foo[0];
Si intenta modificar el contenido de la cuerda, estás bien y verdaderamente solo.
El problema no es solo modificar los contenidos: no se garantiza que el contenido de una cadena sea contiguo, por lo que podría no funcionar en absoluto. – CiscoIPPhone
Puedo estar equivocado allí, de acuerdo con la respuesta aceptada a esta pregunta, se garantiza que sea contiguo en el nuevo estándar: http://stackoverflow.com/questions/1986966/does-s0-point-to-contiguous-characters-in -a-stdstring – CiscoIPPhone
Si const char*
es buena para usted entonces utiliza esta: myString.c_str()
Si realmente necesita char*
y sabe con seguridad que char*
no cambiará entonces usted puede utilizar esto: const_cast<char*>(myString.c_str())
Si char*
puede cambiar entonces necesita copiar la cadena en otra cosa y usarla en su lugar. Ese algo más puede ser std::vector
o new char[]
, depende de sus necesidades.
//assume you have an std::string, str.
char* cstr = new char[str.length() +1];
strcpy(cstr, str.c_str());
//eventually, remember to delete cstr
delete[] cstr;
- 1. ¿Cómo convierto un largo en una cadena en C++?
- 2. ¿Cómo convierto un doble en una cadena en C++?
- 3. ¿Cómo convierto una cadena a un tipo int en C#?
- 4. ¿Cómo convierto nchar en cadena en C#?
- 5. En Java, ¿cómo se convierte una Cadena en un char o un char en una Cadena?
- 6. ¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
- 7. Cómo convertir un puntero char * en una cadena C++?
- 8. ¿Cómo convierto una cadena en byte en C#?
- 9. C++: inserte char en una cadena
- 10. OCaml - ¿Cómo convierto int en una cadena?
- 11. ¿Cómo convierto una cadena binaria en un número en Perl?
- 12. ¿Cómo convierto un entero en una cadena en Excel VBA?
- 13. En Erlang, ¿cómo convierto una Cadena en un valor binario?
- 14. ¿Cómo convierto una cadena en un buffer en Python 3.1?
- 15. cómo asignar una cadena a char * pw en C++
- 16. ¿Cómo convierto una cadena hexadecimal en un entero con signo?
- 17. ¿Cómo convierto un objeto org.w3c.dom.Document en una Cadena?
- 18. ¿Cómo convierto un InputStream a una cadena en Java?
- 19. ¿Cómo convierto un objeto Rails DateTime en una cadena XML?
- 20. Cómo convierto un nombre de función en una cadena
- 21. ¿Cómo convierto un UIColor en una cadena hexadecimal?
- 22. Coffeescript: ¿cómo convierto una cadena en un número?
- 23. ¿Cómo convierto una cadena en un método de clase?
- 24. ¿Cómo convierto una cadena en una representación en minúsculas?
- 25. Añadir char a cadena en C?
- 26. ¿Cómo convierto un System :: String^a const char *?
- 27. ¿Cómo convierto una cadena en una lista en Io?
- 28. ¿Reemplazar un char en un índice dado en una cadena?
- 29. ¿Cómo convierto StreamReader a una cadena?
- 30. puntero char * de cadena en C#
Por favor, publique el código de una muestra. – superfro
NINGUNA de las respuestas publicadas responde a la pregunta real. –
gracias a todos ustedes, funciona! – Ptichka