5 votes

Comment initialiser un pointeur de chaîne de caractères?

Je veux stocker la valeur statique dans un pointeur de chaîne, est-ce possible ?

Si je fais comme ci-dessous

chaîne *array = {"valeur"};

l'erreur se produit

erreur : impossible de convertir 'const char*' en 'std::string*' lors de l'initialisation

7voto

Claptrap Points 21299

Vous devriez alors écrire

chaîne *array = new chaîne("valeur");

bien qu'il soit préférable d'utiliser

chaîne array = "valeur";

car c'est la façon prévue de l'utiliser. sinon, vous devrez gérer la mémoire.

2voto

juanchopanza Points 115680

Un pointeur std::string doit pointer vers un objet std::string. Ce à quoi il pointe réellement dépend de votre cas d'utilisation. Par exemple :

std::string s("valeur"); // initialiser une chaîne
std::string* p = &s; // p pointe vers s

Dans l'exemple ci-dessus, p pointe vers une chaîne locale avec une durée de stockage automatique. Quand elle est détruite, tout ce qui pointe vers elle pointeront vers des données indésirables.

Vous pouvez également faire pointer le pointeur vers une chaîne allouée dynamiquement, auquel cas vous êtes responsable de libérer les ressources quand vous avez fini :

std::string* p = new std::string("valeur"); // p pointe vers une chaîne allouée dynamiquement
//....
delete p; // libérer les ressources quand vous avez fini

Il est conseillé d'utiliser des pointeurs intelligents plutôt que des pointeurs bruts vers des objets alloués dynamiquement.

1voto

Comme array est un tableau de chaîne de caractères, vous pourriez essayer ceci :

int main()
{
  string *array = new string[1]; 
  array[1] = "valeur";
  return 0;
}

0voto

Jerry Coffin Points 237758

Vous pouvez convertir explicitement le littéral en une chaîne de caractères :

 std::string array[] = {std::string("valeur")};

Notez que vous devez définir ceci comme un tableau, pas comme un pointeur cependant. Bien sûr, un tableau a le plus de sens si vous avez plus d'un élément, par exemple :

string array[] = {string("valeur1"), string("valeur2"), string("etc")};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X