Variable char [Résolu]

Signaler
Messages postés
39
Date d'inscription
vendredi 23 avril 2010
Statut
Membre
Dernière intervention
24 avril 2014
-
Messages postés
14981
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
1 mars 2021
-
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

Messages postés
14981
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
1 mars 2021
94
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...
Messages postés
14981
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
1 mars 2021
94
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...
Messages postés
39
Date d'inscription
vendredi 23 avril 2010
Statut
Membre
Dernière intervention
24 avril 2014

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
Messages postés
14981
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
1 mars 2021
94
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...
Messages postés
39
Date d'inscription
vendredi 23 avril 2010
Statut
Membre
Dernière intervention
24 avril 2014

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
Messages postés
39
Date d'inscription
vendredi 23 avril 2010
Statut
Membre
Dernière intervention
24 avril 2014

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
Messages postés
14981
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
1 mars 2021
94
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...