LOCODUINO

Parlons Arduino => Débuter => Discussion démarrée par: Tony04 le avril 26, 2020, 12:11:34 pm

Titre: Les pointeurs et moi
Posté par: Tony04 le avril 26, 2020, 12:11:34 pm
Bonjour,

j'ai presque honte de poser la question ci-dessous, mais je n'aime pas ne pas comprendre.
J'ai beau relire l'article de Thierry sur les pointeurs (dont je n'ai toujours pas tout compris): https://www.locoduino.org/spip.php?article106 ,je ne trouve pas la solution à mon problème.
Mon code:
char* menu_locos[]={
"Loco :             ~",   
"Canal :            ~",
"Vitesse ralenti:   ~",   
"Vitesse normale:   ~"};

Le message d'erreur (non bloquant) du compilateur:
centrale.ino:98:23: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

 "Vitesse normale:   ~"};
                                   ^

Où est l'erreur, ou ne faut-il tout simplement pas tenir compte de ce message ?

Bon dimanche à tous.
Cordialement
Antoine
Titre: Re : Les pointeurs et moi
Posté par: Jean-Luc le avril 26, 2020, 12:25:30 pm
Bonjour Antoine.

Il n'y a pas de honte, le langage C est plein de pièges et très technique.

Tu as un tableau de pointeurs vers des chaines qui étant litérales, sont des constantes.

Or ton tableau est un tableau de pointeur vers des variables

Le compilateur d'avertit que c'est pas bien de faire passer des constantes pour des variables  8)

Il faut écrire :

const char* menu_locos[]={
  "Loco :             ~",   
  "Canal :            ~",
  "Vitesse ralenti:   ~",   
  "Vitesse normale:   ~"
};
Titre: Re : Les pointeurs et moi
Posté par: Jean-Luc le avril 26, 2020, 12:29:49 pm
D'ailleurs, si tu veux aller au bout, tes pointeurs sont des pointeurs vers des constantes mais ils sont également constants eux même car je suppose que nulle part dans le programme tu ne désires écrire

  menu_locos[0] = "titi";

Dans ce cas il faudrait l'indiquer de la manière suivante :

const char* const menu_locos[]={
  "Loco :             ~",   
  "Canal :            ~",
  "Vitesse ralenti:   ~",   
  "Vitesse normale:   ~"
};

Ici tu déclares un tableau de pointeurs constants (2e const) vers des constantes (1er const)

Titre: Re : Les pointeurs et moi
Posté par: Tony04 le avril 26, 2020, 01:48:00 pm
Bonjour et merci Jean-Luc,

en y réfléchissant à 2 fois et surtout avec ton explication, le message du compilateur semble justifié.

Antoine