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 :

Compréhension d'un prototype


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut Compréhension d'un prototype
    Bonjour,
    Ma question concerne le fonctionnement d'une fonction d'après le prototype qui lui est associé.

    Il s'agit de la fonction xbuf_sort() dont le prototype est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // sort text entries separated by 'separator' in the buffer
    void  xbuf_sort    (xbuf_t *ctx, char separator, s32 remove_duplicates);
    C'est une fonction qui si j'ai bien compris est censé me retourner dans "remove_duplicates" le pointeur vers la chaine suivant la variable "separator". Ou plus simplement, il s'agit d'une fonction équivalente à strtok_r()...

    J'utilise alors la fonction comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    s32 suite = 0;
    xbuf_sort(&ctx, ":", suite);
    Mais ça me cause une erreur de type "Signal: 11 Address not mapped to object" que je n'arrive encore une fois pas à comprendre donc je demande à nouveau votre aide ! Par contre lorsque pour tester d'autres erreurs je remplace "suite" dans ma fonction par "*suite" alors une erreur "warning: passing argument 2 of 'xbuf_sort' makes integer from pointer without a cast" s'affiche (en plus des autres erreurs lié aux * ajouté).

    Une idée d’où viens le problème svp ?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Le deuxième argument est un char, tu lui passes un char*.

    Remplace ":" par ':'.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Merci, ça à en effet retirer le warning lorsque je rajoute "*" donc maintenant il ne reste plus qu'une erreur "invalid type argument of 'unary *' (have 's32')" qui serait logiquement lié à l'ajout du * mais lorsque je le retire ça me remet toujours l'erreur "Signal: 11 Address not mapped to object"

  4. #4
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    tu montres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // sort text entries separated by 'separator' in the buffer
    void  xbuf_sort    (xbuf_t *ctx, char separator, s32 remove_duplicates);
    Je pense (en ayant googlé un peu) que le buffer est définit par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    typedef struct
    {
       char *ptr;       // data buffer
       u32   allocated; // memory allocated
       u32   len;       // memory used
       u32   growby;    // memory allocation increment
    } xbuf_t;
    ctx->ptr est considéré comme une liste de chaines séparées par separator ; je suppose (toujours en ayant googlé) que remove_duplicates est un booléen (s32 -> signed 32bit integer) qui indique si on retire ou non les doublons ...
    Ne t'attends pas à recevoir quoi que ce soit par remove_duplicates.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 26
    Par défaut
    Oui en effet le buffer est définit par xbuf_t mais je ne saisi pas trop ce que tu veux dire en parlant de doublon définit par remove_duplicates. J'obtiens d'ailleurs l'erreur quelque soit la valeur que je donne à la variable donc je suis un peu largué !

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    si tu as une chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char* str="un:deux:deux:trois:quatre:trois:quatre:un:quatre";
    je suppose (je n'ai jamais utilisé cette bibliothèque) que tu dois faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    xbuf_t buffer;
    xbuf_init(&buffer); // on initialise le buffer
    xbuf_cat(&buffer, str) // on le remplit
    buffer.ptr contient "un:deux:deux:trois:quatre:trois:quatre:un:quatre"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xbuf_sort(&buffer,':',0); // on trie le buffer sans enlever les doublons
    buffer.ptr contient "deux:deux:quatre:quatre:quatre:trois:trois:un:un"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xbuf_sort(&buffer,':',1); // on trie le buffer en enlevant les doublons
    buffer.ptr contient "deux:quatre:trois:un"

    Je suppose ça en partant du header.

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

Discussions similaires

  1. Compréhension de fseek
    Par Argonz dans le forum C
    Réponses: 9
    Dernier message: 12/01/2004, 15h01
  2. compréhension du profil d'une fonction
    Par lor dans le forum MFC
    Réponses: 7
    Dernier message: 08/01/2004, 12h59
  3. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  4. onclipevent (problème de compréhension)
    Par stephane eyskens dans le forum Flash
    Réponses: 8
    Dernier message: 24/09/2003, 15h09
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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