Go Down

Topic: libarry string, besoin d'aide (Read 660 times) previous topic - next topic

KiliYaBB

Aug 16, 2009, 09:28 am Last Edit: Aug 16, 2009, 09:32 am by KiliYaBB Reason: 1
Bonjour,

J'essaye d'utiliser la librairies String pour faire afficher "    bonjour     "

caractère après caratère sur un afficheur lcd 16x2

voila mon sketch, dont la compilation ne passe pas, apparemment cestr le char[16] qui ne serait pas du bon type :


#include <LiquidCrystal.h>
#include <string.h>


LiquidCrystal    lcd(3, 4, 5, 6, 7, 8, 9);

char title[16] = "    bonjour     ";

void setup() {
 lcd.begin(2, 16);
}

void loop() {
 for(int i=0; i<=15;i++){
 lcd.setCursor(i, 1);
 lcd.print(title.charAt(i));
delay(100);
 }

}

fdufnews

Ta variable title est un tableau de caractères pas un objet String. Il faut le manipuler comme tel.
Quote
lcd.print(title.charAt(i));

devient
Code: [Select]
lcd.print(title[i]);

Si tu veux utiliser String il faut définir ta variable comme cela
Code: [Select]
String title = String(longueur_de_la_chaine);
Jette un oeil sur les exemples qui se trouvent dans le répertoire exemple de la librairie String.

KiliYaBB

#2
Aug 16, 2009, 03:47 pm Last Edit: Aug 16, 2009, 03:48 pm by KiliYaBB Reason: 1
ok, merci

ca marche presque (ca compile) sauf que l'IDE me dit :

pour char title[10] = "bonjournos";

"initialinzer-string for arrays of chars is too long"

alors que bonjournos comprend bien 10 caractères

quand je mets char title[11] = "bonjournos";

ca passe, pourquoi ?

Merci !

fdufnews

#3
Aug 16, 2009, 04:51 pm Last Edit: Aug 16, 2009, 04:53 pm by fdufnews Reason: 1
Il doit y avoir un caractère pour indiquer la fin de la chaine afin que les routines de manipulation de chaines s'y retrouvent. Ce caractère s'ajoute à la fin de la chaine. Donc pour une chaine de 10 caractères, il faut réserver de la place pour 11..
Ce caractère doit être explicitement mis si tu définis ta chaine dans un tableau en ajoutant un élément à la fin:
Code: [Select]
title[dernier_element]=0;
ou
title[dernier_element]='\0';

si tu définis ta chaine avec des guillemets (title="titre") alors le terminateur est ajouté automatiquement par le compilateur.

Si tu travailles avec un tableau et que tu oublies le terminateur, les routines de manipulation de chaines ne trouvent pas la fin de la chaine et dans le meilleur des cas cela affiche des chaines de ouf avec des caractères bizzares dans le pire des cas cela cause un plantage du programme par écrasement de données.

Go Up