2010-02-11 20 views

Respuesta

23

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); 
+6

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

+0

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

+0

@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. –

8
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``

2

se puede hacer uso de la stringclass constructor que toma un char* como argumento.

char *str = "some c style string"; 
string obj(str); 
+0

Muchas gracias ... – assassin

0

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.

+0

¿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

+0

@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

Cuestiones relacionadas