IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Comprendre les "String" et "char" utilisées dans des tableaux…


Sujet :

Arduino

  1. #1
    Membre averti

    Homme Profil pro
    Electronicien
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut Comprendre les "String" et "char" utilisées dans des tableaux…
    Bonjour,
    voila j'ai créé une boucle qui récupère une chaine de caractères dans une liaison UART.
    J'essaie de filtrer les éléments mais voila j'ai des lacunes en C/C++ aussi, je vous soumets le sketch qui fonctionne, mais je ne comprends pas pourquoi...
    voici plus de précision :
    pour que ce sketch fonctionne j'ai rajouté cette ligne de code :"String chaine=String(tableau[a]);" or je n'utilise pas la variable "chaine".
    Je crois que le problème vient d'une incompréhension sur l'utilisation des "String " et "char", je vous laisse juges et attends vos remarques et explications avec tous mes remerciements.

    si vous avez des ouvrages à me conseiller je suis preneur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
    int i=0, a=0, b=0;
     
     
    void setup() 
    {
      Serial.begin(9600);
      delay (1000);
    }
     
    void loop()
    {
      char data[]="CO2_ON=1;CO2_OFF=1;heureActuelle=(0, 0, 2);DEPART=(0, 0);ARRET=(23, 30)";
      //String chaine=String(data);
      char *tableau[4]; /* on pointe le contenu de l'adresse de chaque ligne du tableau*/
      if (b < 4)
      {
        for (a=0; a<=4; a++)
        {
          if (a > 0)
          {
            tableau[a]=strtok(0,";");     /*découpage de la chaine au niveau des points virgules*/
          }                               /*                                                    */
          else                            /*         chaque ligne du tableau                    */
          {                               /*                                                    */
            tableau[a]=strtok(data,";");  /*         contient un bout de la chaine              */
          }
          String chaine=String(tableau[a]);
          char buff[16];
          sprintf(buff, "tableau[%d]= %s", a, tableau[a]);
          Serial.println(buff);
          b++;
        }
      }
    }

    PS : le résultat attendu est bien le suivant :
    tableau[0]= CO2_ON=1
    tableau[1]= CO2_OFF=1
    tableau[2]= heureActuelle=(0, 0, 2)
    tableau[3]= DEPART=(0, 0)
    tableau[4]= ARRET=(23, 30)

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    Je détecte un problème majeur de gestion de tableau: ta ligne
    crée un tableau de 4 pointeurs. On ne peut donc accéder qu'à tableau[0], tableau[1], tableau[2] et tableau[3].
    Pourtant dans ta boucle tu fais un accès à tableau[4] qui correspond à un espace mémoire situé en dehors de ton tableau.

    Essaie avec
    si tu veux un tableau de 5 chaines

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    Je viens aussi de voir
    Vu la taille des chaines affichées, un tableau de 16 caractères (en fait 15 + le 0 terminal pour délimiter la fin de la chaine) c'est trop juste, même avec un chausse-pied

  4. #4
    Membre averti

    Homme Profil pro
    Electronicien
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Merci pour cette rapide réponse,
    j'ai modifié le code : *tableau[5] au lieu de *tableau[4], et char buff[32]; au lieu de char buff[16];
    j'ai enlevé la ligne : String chaine=String(tableau[a]);, maintenant ça fonctionne.

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    Tu aimes vivre dangereusement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau[2]= heureActuelle=(0, 0, 2)
    cette chaine fait plus de 31 caractères.

  6. #6
    Membre averti

    Homme Profil pro
    Electronicien
    Inscrit en
    Février 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Electronicien

    Informations forums :
    Inscription : Février 2014
    Messages : 20
    Par défaut
    Citation Envoyé par jackk Voir le message
    Tu aimes vivre dangereusement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau[2]= heureActuelle=(0, 0, 2)
    cette chaine fait plus de 31 caractères.
    Exact, je rectifie merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2015, 14h22
  2. [JNA] Soucis Signed char mavariable :1 dans des structures
    Par John.BE dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 05/03/2012, 15h53
  3. Réponses: 2
    Dernier message: 27/11/2009, 17h04
  4. Addition de strings dans des tableaux
    Par OVR-101 dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/01/2007, 08h07
  5. Réponses: 2
    Dernier message: 21/05/2006, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo