SanDum
Messages postés39Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention24 avril 2014
-
27 mai 2011 à 00:17
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024
-
30 mai 2011 à 10:02
Bonjour tout le monde
J'ai un problème dans mon code avec les variables de type char. Ce que je veux faire, c'est de lire les dossiers sur une carte sd venant de mon module arduino et de construire le chemin complet ( /filname2)...
j'ai déclaré les variables qui me posent problème comme suit:
char filename[128],filename2[128],
Voici une partie de mon code:
while( VarSelection != VarDossierChoisie)
{
ummc.readdir(filename, "*");
VarSelection++;
}
Serial.println(filename);
strcpy(filename2,filename);
Le problème est que j'arrive à afficher 1 fois le résultat, mais ensuite tout s’arrête...
Je ne comprend pas bien le fonctionnement des variables char, donc merci de m'expliquer cela dans un langage facile.
Merci de votre aide
Grégory
SanDum
Messages postés39Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention24 avril 2014 27 mai 2011 à 13:09
Salut Bruno
Merci de ta réponse, en faite comme c'est seulement une partie de mon code et que j'affiche certaine réponse pour voir si ma programmation fonctionnais, le problème vient d'ailleur.
Pour expliquer un peu plus le fonctionnement de mon programme:
la boucle while me sert a déterminer les nom des dossiers que j'ai sur ma carte sd. Il faut que par exemple que la boucle se face 5 fois pour avoir le 5 ème nom du dossier...seulement je dois avoir le chemin complet pour aller prendre dans un dossier les mp3 qui si trouve. Par défaut mon chemin commence par "/" et je dois rajouter le nom du dossier après pour vois le chemin complet.
Dans if(VarControle2==1) ,je dois coller "/" avec "filename2" qui vient d'être copier de "filname". Le problème qui arrive c'est que le chemin complet s'affiche 1 fois quand VarControle2 devient un 1, mais après le programme plante. Donc le problème vient strcat ("/",filename2), je pense, car c'est seulement quand cette fonction s'affiche que tout s’arrête.
J'espère que cela a éclaircie mon problème.
Merci
Grégory
BunoCS
Messages postés15472Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention25 mars 2024103 27 mai 2011 à 13:42
Donc le problème vient strcat ("/",filename2), je pense,
Tu as raison, le problème est ici.
strcat(destination,source), comme son nom l'indique, concatène 2 chaines de caractères: la chaine "source" sera ajoutée à la fin de la chaine "destination", pour peut qu'il y ait suffisamment de place. Or, dans ton cas, la chaine destination est une chaine statique, donc fixe, donc impossible à agrandir. Il faut absolument que le 1er paramètre soit un char* et que sa taille soit suffisante pour accueillir la chaine à ajouter.
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Vous n’avez pas trouvé la réponse que vous recherchez ?
SanDum
Messages postés39Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention24 avril 2014 27 mai 2011 à 14:16
Salut Bruno
Est ce que je peux faire quelque chose dans ce style:
char VariableChemin[128]; filename[64], filename2[64];
VariableChemin="/";
strcpy(filename2,filename);
strcat (VariableChemin,filename2);
Serial.println(VariableChemin); //VariableChemin -> /NomduDossier
Je ne sais pas trop qu'est ce que char*... est ce que c'est ce que j'ai fais ?
Merci
Grégory
SanDum
Messages postés39Date d'inscriptionvendredi 23 avril 2010StatutMembreDernière intervention24 avril 2014 27 mai 2011 à 22:10
Allo Bruno
Encore un petit problème.
J'ai déclarer dans mon entête:
char VariableChemin[128]; filename[64], filename2[64];
et dans mon programme
VariableChemin[128]='/';
Partie de mon code :
if(VarControle2==1)
{
VarChaine[128]='/';
Serial.println(VarChaine);
VarControle2=0;
}
Rien ne s'affiche...Comment ca se fait ?
Si je fais la même chose mais que je met VariableChemin[128]="/" dans l'entête, cela s'affiche mais je ne peux plus efface VarChaine sinon le signe '/' n'est plus la pour les autres directions! ( porte une attention au '' ou "")
Merci
Grégory