2011-06-02 15 views
5
char  *buffer1 = "abc"; 

    const char *buffer2 = (const char*) buffer; 

    std :: string str (buffer2); 

Esto funciona, pero quiero declarar la std :: string objeto es decir, str , vez y usarlo muchas veces para almacenar diferentes carbón const *.Cómo almacenar un const char * en std :: string?

¿Cuál es la salida?

+1

aclare lo que desea poder hacer, posiblemente con un ejemplo de código que le gustaría trabajar. (el código que publicaste no tiene mucho sentido) – Mat

+0

@Mat Ah, bueno, poco después de publicar esta pregunta, encontré la solución fácil también: doh: 'std :: string str (buffer2);' Una forma sencilla de almacenar ¡que const char * es usar la función 'append' de la clase stl! Como 'std :: string str; str.append (buffer2); ' ' –

Respuesta

13

Sólo puede volver a asignar:

const char *buf1 = "abc"; 
const char *buf2 = "def"; 

std::string str(buf1); 

str = buf2; // Calls str.operator=(const char *) 
+1

Sí, y aún más opciones con string :: assign ... –

1

str es en realidad la copia de los personajes de buffer2, por lo que no está conectada de ninguna manera.

Si desea que tenga otro valor, que acaba de asignar una nueva

str = "Hello"; 
0

hacer una clase dicen que componen MiCadena búfer de cadena. Tener una constante de esa clase. y luego puede reasignar el valor del buffer de cadenas compuesto, mientras usa la misma constante.

1

Ah, bueno, como he comentado anteriormente, encontró la respuesta poco después de la publicación de la pregunta: do:

const char* g; 
    g = (const char*)buffer; 

    std :: string str; 
    str.append (g); 

Por lo tanto, puedo llamar a la función append() tantas veces (después de usar la clara()) como quiero en el mismo objeto con "const char *".

Aunque la función "push_back" no funcionará en lugar de "append".

+2

'assign' sería más expresivo (y más corto y más claro) luego' clear' seguido de 'append', pero una asignación simple usando '=' funcionará igual de bien. –

Cuestiones relacionadas