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

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

    std :: string str (buffer2); 

Cela fonctionne, mais je veux déclarer la std :: string objet à savoir str, une fois et de l'utiliser à plusieurs reprises pour stocker différents const char *.Comment stocker un const const * dans std :: string?

Quelle est la solution?

+1

Veuillez clarifier ce que vous voulez faire, éventuellement avec un exemple de code que vous voudriez utiliser. (le code que vous avez posté ne fait pas beaucoup de sens) – Mat

+0

@Mat Ah, eh bien, peu après avoir posté cette question, j'ai aussi trouvé la solution facile: doh: 'std :: string str (buffer2);' Un moyen simple de stocker que const char * utilise la fonction 'append' de la classe stl! Comme 'std :: string str; str.append (buffer2); ' ' –

Répondre

13

Vous pouvez simplement réattribuer:

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

std::string str(buf1); 

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

Oui, et encore plus d'options avec string :: assign ... –

1

str est toutefois copier les caractères de buffer2, donc il est pas connecté en aucune façon.

Si vous voulez qu'il ait une autre valeur, vous attribuez juste une nouvelle

str = "Hello"; 
0

Faire une classe disent MaChaîne qui composent le tampon String. Avoir une constante de cette classe. puis vous pouvez réaffecter la valeur du tampon de chaîne composé, tout en utilisant la même constante.

1

Eh bien, comme je l'ai fait remarquer ci-dessus, a trouvé la réponse peu après l'affichage de la question: doh:

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

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

Alors, je peux appeler append() fonction autant de fois (après l'utilisation du clair()) comme je veux sur le même objet avec "const char *".

Bien que la fonction "push_back" ne fonctionne pas à la place de "append".

+2

'assign' serait plus expressif (et plus court et plus clair) puis' clear' suivi de 'append', mais une affectation simple utilisant '=' fonctionnera aussi bien. –

Questions connexes