¿Alguien me puede decir cómo convertir una cadena de estilo C (es decir, un char *) a una cadena de estilo C++ (es decir, std :: cadena) en un programa C++?convirtiendo cadena de estilo c a cadena de estilo C++
Muchas gracias.
¿Alguien me puede decir cómo convertir una cadena de estilo C (es decir, un char *) a una cadena de estilo C++ (es decir, std :: cadena) en un programa C++?convirtiendo cadena de estilo c a cadena de estilo C++
Muchas gracias.
std::string
puede tomar un char *
como un parámetro constructor, y a través de una serie de operadores.
char * mystr = "asdf";
std::string mycppstr(mystr);
o de los abogados de lenguaje
const char * mystr = "asdf";
std::string mycppstr(mystr);
char* cstr = //... some allocated C string
std::string str(cstr);
El contenido de cstr
se copiarán en str
.
Esto puede ser usado en las operaciones también como:
std::string concat = somestr + std::string(cstr);
Dónde somestr
es ya `std :: string``
se puede hacer uso de la string
class constructor que toma un char*
como argumento.
char *str = "some c style string";
string obj(str);
Muchas gracias ... – assassin
Otra forma de hacer la conversión es llamar a una función que toma un const std::string&
como parámetro:
void foo(const std::string& str);
void bar()
{
char* str= ...
foo(str);
}
Creo que es mucho más ordenada para hacer la conversión en un límite de llamada a la función.
¿Estás diciendo que foo debería ser una función vacía aquí y al llamar a esa función str se convierte a const std :: string type? – assassin
@assassin: No, lo siento. 'foo()' es cualquier función que toma 'const std :: string &'. Podría ser uno que escribas. Mi respuesta fue solo un patrón de uso en el que tienes una cadena de caracteres y quieres convertirla. También separa las partes del código donde se genera una cadena en c desde donde los datos se utilizan en forma de 'std :: string'. – quamrana
Me pregunto por qué todos los que responden a esto usan el tipo de caracteres * defectuoso (pero permitido por el estándar) para los literales de cadena. Todos los literales de cadena son de solo lectura y, por lo tanto, se debe usar el tipo char const *. El argumento tomado por std :: string también es char const *. – Tronic
así que si tengo una cadena tipo C en una variable char *, ¿cómo la convierto en una cadena de estilo C++ dado que estrictamente hablando, el parámetro para el constructor debe ser char const * type? – assassin
@assassin: no tiene char * en absoluto, pero su cadena de tipo C es una char const *. Si es su código, puede cambiarlo, si está en una biblioteca, no puede. –