Problème avec un tableau de char
Nxl
Messages postés
1257
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
j'essaye de coder une procédure qui fait défiler une chaîne de caractère de droite à gauche sur un écran LCD mais je rencontre un problème bizarre avec le tableau qui stocke la chaîne à faire défiler...
En effet l'indice 0 du tableau prend des nouvelles valeurs à chaque itération alors qu'à aucun moment il est affecté...
Voici le code, je précise que c'est du C pour un PIC 18 donc variables globales car presque pas de pile, et pour le moment c'est juste pour débugger, le tout sera sans doute mis dans une procédure...
Voilà le résultat, du coup il ré affiche le r car l'indice 0 de chaîne prend le caractère courant alors qu'il devrait être non changé, en revanche aucun problème avec les autres indices.
j'essaye de coder une procédure qui fait défiler une chaîne de caractère de droite à gauche sur un écran LCD mais je rencontre un problème bizarre avec le tableau qui stocke la chaîne à faire défiler...
En effet l'indice 0 du tableau prend des nouvelles valeurs à chaque itération alors qu'à aucun moment il est affecté...
Voici le code, je précise que c'est du C pour un PIC 18 donc variables globales car presque pas de pile, et pour le moment c'est juste pour débugger, le tout sera sans doute mis dans une procédure...
int indiceLCD = 0;
int compteurBoucle = 0;
char interm = "";
const int tailleChaine = 7;
int indiceCaractereCourant = 0;
char charLCD[15] = {};
char chaine[tailleChaine] = "Bonjour";
WHILE (TRUE){
//rtos_run();
charLCD[15] = chaine[indiceCaractereCourant];
for(compteurBoucle = 0 ; compteurBoucle < 15 ; compteurBoucle++) {
charLCD[compteurBoucle] = charLCD[compteurBoucle+1];
indiceLCD = compteurBoucle;
indiceLCD ++;
lcd_gotoxy(indiceLCD, 1);
lcd_putc(charLCD[compteurBoucle]);
delay_ms(5);
}
compteurBoucle = 0;
indiceCaractereCourant = (indiceCaractereCourant + 1) % tailleChaine ;
Voilà le résultat, du coup il ré affiche le r car l'indice 0 de chaîne prend le caractère courant alors qu'il devrait être non changé, en revanche aucun problème avec les autres indices.

1 réponse
-
Bonjour
Attention ! charLCD[15] n'existe pas puisque charLCD est dimensionné à 15. On a donc des éléments de charLCD[0] à charLCD[14].
DonccharLCD[15] = chaine[indiceCaractereCourant];
est absolument illégal. Si les variables charLCD et chaine sont consécutives en mémoire, tu tapes en fait dans chaine[0].
Dans ta boucle, compteurBoucle va de 0 à 14. Donc quand tu vas lire charLCD[compteurBoucle+1], tu sors de charLCD et tu vas à nouveau taper dans chaine[0].