Bonjour @fnepk,
Pourquoi avoir créé votre sujet dans Le bar et pas dans la catégorie générale Français ? Par ailleurs, s'il vous plaît lorsque vous postez du code mettez le entre balise <CODE/>, cela permet une bien meilleure lisibilité.
Votre problème vient du fait que vous tentez de placer un objet String dans un tableau de char. Pour passer le contenu de la string à LigneCmd, vous devez utiliser la méthode c_str() de la classe String, qui retourne une chaîne de caractères constante.
Le programme corrigé donne cela
String Lig;
char* LigneCmd[25];
int cpt_lig;
void setup()
{
Serial.begin(115200);
Serial.println("OK");
Lig="abc";
Serial.print("Lig: "); Serial.println(Lig);
LigneCmd[cpt_lig] ="abc"; // ok car on passe directement une chaine de caractère
Serial.print("LigneCmd: "); Serial.println(LigneCmd[cpt_lig]);
// LigneCmd[cpt_lig] = Lig; // pas ok car Lig est un objet - une instance de la classe String
/*
variante ok, c_str() retourne une
chaine de caractère constante
voir https://www.arduino.cc/reference/fr/language/variables/data-types/string/functions/c_str/
*/
LigneCmd[cpt_lig] = Lig.c_str();
Serial.print("LigneCmd: "); Serial.println(LigneCmd[cpt_lig]);
}
void loop() {}
J'aurai bien fait un petit wokwi, malheureusement la fonction save demande maintenant de créer un compte...
String Lig;
char LigneCmd[25];
void setup()
{
Serial.begin(115200);
Serial.println("OK");
Lig = "abc"; // ok car c'est un objet String, on peut lui affecter une valeur avec "="
Serial.print("Lig: "); Serial.println(Lig);
strcpy(LigneCmd, "foobar"); // ici comme c'est une c-string on doit utiliser les fonctions C
Serial.print("LigneCmd: "); Serial.println(LigneCmd);
// LigneCmd = Lig; // pas ok car Lig est un objet - une instance de la classe String
/*
variante ok, c_str() retourne une chaine de caractère constante
voir https://www.arduino.cc/reference/fr/language/variables/data-types/string/functions/c_str/
*/
strcpy(LigneCmd, Lig.c_str());
Serial.print("LigneCmd: "); Serial.println(LigneCmd);
}
void loop() {}
il faut toujours faire attention avec les anciennes fonction C et il vaut mieux utiliser les versions avec n ou l qui permettent de donner la taille du buffer même si elles sont non standard (elles ont été adoptées quasiment partout maintenant).
➜ on préfèrera donc
strlcpy(LigneCmd, Lig.c_str(), sizeof LigneCmd);
et si vous voulez tester si ça a marché
if (strlcpy(LigneCmd, Lig.c_str(), sizeof LigneCmd) >= sizeof LigneCmd) {
// Gestion de l'erreur, la copie n'a pas réussi entièrement.
} else {
// La copie a réussi.
}