Auteur Sujet: Les pointeurs et moi  (Lu 8578 fois)

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Les pointeurs et moi
« 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

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Les pointeurs et moi
« Réponse #1 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:   ~"
};
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Les pointeurs et moi
« Réponse #2 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)

Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Les pointeurs et moi
« Réponse #3 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