Variable char

Résolu
SanDum Messages postés 39 Date d'inscription vendredi 23 avril 2010 Statut Membre Dernière intervention 24 avril 2014 - 27 mai 2011 à 00:17
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 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);

VarControle=0;
VarSelection=0;
}

//----------------------------------------------------------------------
if(VarControle2==1)
{
Serial.println(strcat ("/",filename2));
VarControle2=0;
}

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

7 réponses

BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 mai 2011 à 14:26
Oui, ça devrait être bon (on est d'accord que, dans ton exemple, ton strcpy ne sert à rien...)


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
27 mai 2011 à 09:25
Hello,
Ton println est en dehors de ta boucle while. Donc il est normal que tu affiches le résultat qu'une seule fois

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
SanDum Messages postés 39 Date d'inscription vendredi 23 avril 2010 Statut Membre Dernière intervention 24 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
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SanDum Messages postés 39 Date d'inscription vendredi 23 avril 2010 Statut Membre Dernière intervention 24 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
0
SanDum Messages postés 39 Date d'inscription vendredi 23 avril 2010 Statut Membre Dernière intervention 24 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
0
BunoCS Messages postés 15475 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 avril 2024 103
30 mai 2011 à 10:02
VarChaine[128]='/';

Tu as déclaré 128 "places" pour VariableChemin, numérotées de 0 à...127. Tu essaies d'écrire à la 128..qui n'existe pas.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
0
Rejoignez-nous