Problème avec un tableau de char

Fermé
Nxl Messages postés 1038 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 5 janvier 2017 - Modifié par antoine7104 le 25/11/2015 à 23:23
 Utilisateur anonyme - 26 nov. 2015 à 00:27
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...


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

Utilisateur anonyme
26 nov. 2015 à 00:06
Bonjour

Attention ! charLCD[15] n'existe pas puisque charLCD est dimensionné à 15. On a donc des éléments de charLCD[0] à charLCD[14].

Donc
charLCD[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].
0
Nxl Messages postés 1038 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 5 janvier 2017 133
26 nov. 2015 à 00:25
Merci beaucoup pour ta réponse !
Désolé d'avoir posté pour une connerie comme ça...^^
J'étais parti sur un délire métaphysique alors qu'en fait les variables étaient stockées à côté !
Bonne soirée
0
Utilisateur anonyme > Nxl Messages postés 1038 Date d'inscription mardi 2 février 2010 Statut Membre Dernière intervention 5 janvier 2017
26 nov. 2015 à 00:27
De rien

Bonne nuit :-)
0