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

 C Discussion :

Comment passer correctement un char, en parametre d'une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 166
    Par défaut Comment passer correctement un char, en parametre d'une fonction
    Bonjour à tous,

    J'ai encore du mal a comrpendre comment passer correctement un char dans une fonction.

    EN gros
    je déclare un char
    Je recupère ce que je tape dans mon terminal
    Je recupere le deuxième et troiseme parametre ( 3 et +41223456677)
    Je regarde si posi (3) n'a pas deux caractere, soit n'est pas plus grand que 9
    J'appelle la fonction WritePhoneNum(byte posi, char number) qui prend en parametre la position et le nuemro de téléphone

    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
     
    if(!strncmp(inSerial,"dirw",4)){
     
         // Je tape dans mon terminal driw 3 +41223456677
          //Je recupère le deuxieme parametre 3 et le numero
          // qui préalablement déclaré ainsi
          // char posi[2]; char number[20];
          sscanf(inSerial,"%*s%s%s",posi, number);
          Serial.print(posi[0]);
     
          // Si posi a plus d'un caractere, comme par exemple 22
          if(strlen(posi) > 1){
            Serial.print(F("The position must have one caracter (1-9)")); 
          }else{
            // Si non affiche le numero a enregistré
            Serial.print(number);   
     
            WritePhoneNum((byte)(posi[0] - '0'), number);
     
          }
     
        }
    Je ne comprends pa spourquoi, au niveau de ma fonction WritePhoneNum() j'ai un message d'erreur
    "Invalid conversion from 'char*' to 'char'
    Je ne comprends pa spourquoi, prce que toutes les ariable concernée sont des char, donc pourquoi il y a t il un probleme de convertion?

    Voici la fonction en question
    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
    37
    38
    39
     
    // write phone number to the SMS directory
    void WritePhoneNum(byte posi, char number){ 
     
      #ifdef DEBUG
            Serial.println(F("\nWRITING TO THE DIRECTORY"));
            Serial.println(F("--------------------------------"));
          #endif
     
           // Ceci est peut etre inutile. je ée fais deux fois. Je verrai plus tard pour suprimer...
           if(posi >= 1 && posi <= 9) {
     
             Serial.print(number);
             if(strlen(number) > 2){
               gsm.WritePhoneNumber(posi, number);
     
               #ifdef DEBUG
                 Serial.print(F("The phone number "));
                 Serial.print(number);
                 Serial.print(F(" has been recorded at the position "));
                 Serial.println(posi);
               #endif
             }else{
               #ifdef DEBUG
                 Serial.print(F("The phone number must have at least 3 caracteres "));
     
               #endif
             }
     
          } else {
              Serial.println(F("Entrer une valeur entre 1 et 9")); // pas bon
          }
     
          Serial.println("");
     
          #ifdef DEBUG
            enterCommand();
           #endif
    }

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Entre char number; et char number[20];, tu ne vois pas une petite différence ?

  3. #3
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Coucou, en regardant ton code, à cette ligne:

    Citation Envoyé par pierrot10 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sscanf(inSerial,"%*s%s%s",posi, number);
    j'ai regarder un peu le sscanf mais je ne vois pas ou tu veux en venir.
    C'est quoi le %*s?

    Merci de m'aider à y voir plus clair

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    @Bysbobo : Tu peux regarder cette discussion : http://www.developpez.net/forums/d13...ne-caracteres/

  5. #5
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    OK! Ignorer le premier mot, merci

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 166
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 166
    Par défaut
    Entre char number; et char number[20];, tu ne vois pas une petite différence ?
    Ben j'ai honte non, Quoi oui mais je ne sais pas comment l'expliquer.
    Le premier on déclare un char sans lui donner une longeur.
    Le deuxième ob lui donne un.
    De là j'ai une question, a quoi ca sert de déclarer char number;? Es-ce que la longueur sera définie quand on lui attribura une chaine de caracter?

    j'ai regarder un peu le sscanf mais je ne vois pas ou tu veux en venir.
    C'est quoi le %*s?
    En fait le but ici est de récupérer des données qui sont entre des espaces
    Par exemple
    sms 3 texte
    sms est la "commande", enmvoyer une SMS.
    3 est la posistion du téléphone dans le directry
    texte est le texte a envoyer.

    J'ai pas l'occasion résolu le problème en ajoutant une étoile * à la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void WritePhoneNum(byte posi, char * number){.. code..}
    Mais c'est quoi cette étoile. J'ai encore du mal à comprendre ceci.

  7. #7
    Membre actif Avatar de Mipwiq
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 42
    Par défaut
    Citation Envoyé par pierrot10 Voir le message
    Mais c'est quoi cette étoile. J'ai encore du mal à comprendre ceci.
    Cette étoile désigne un pointeur. Pour bien comprendre cette notion il faut regarder un peu au niveau de la mémoire.
    Quand tu déclares une variable de cette manière :

    il faut te la représenter comme un bloc de données.
    Alors que si tu fait de cette manière :

    c'est l'adresse mémoire d'un bloc de données.
    C'est une notion très importante à connaitre, documente toi relis bien tes cours et cherche des info sur les pointeurs et les arrays.

Discussions similaires

  1. Réponses: 52
    Dernier message: 23/10/2014, 11h22
  2. passer un tableau php en parametre d'une fonction js
    Par maxwel56 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2012, 16h51
  3. Réponses: 2
    Dernier message: 08/01/2012, 21h56
  4. Réponses: 2
    Dernier message: 24/01/2009, 18h18
  5. Réponses: 6
    Dernier message: 17/10/2006, 09h48

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