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 :

qsort pas si simple


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut qsort pas si simple
    Bonjour à tous,

    Le code compile mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *buff[2048] = {0};
    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
     
     while ( NULL != fgets( basebuf, sizeof basebuf, Input ) ) {
          if ( ( ln = strlen( basebuf ) ) > 1 ) {
             buff[ligne] = ( char * ) malloc( ( ln * sizeof( char ) ) + 1 );
     
                   if ( *( buff + ligne ) != NULL )
                     strcpy( buff[ligne], basebuf);
                   else
                      printf ( "\nLigne: %d  Mémoire non allouée. %p\n", __LINE__, *( buff + ligne ) );
             ligne++;
          }
       }
       fflush( stdout );
     
       return ligne-1;
    }

    crash:
    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
     
     
    	/* de la faq*/
    	int pstrcmp(const void * p1, const void * p2)
    	{
    		return strcmp(*(char * const *)p1, *(char * const *)p2);
    	}
     
    /*    MAIN    */
     
    int main(void)
    {
    int i;
    int lines;
     
    lines = fichierdInput(stdin);
    printf ("\n%d\n", lines);
     
    qsort (buff, lines, sizeof(buff), pstrcmp);
    Pourquoi ne pas envoyer strcmp (ça ne fonctionne pas) ?

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qsort (buff, lines, sizeof(buff), pstrcmp);
    Le troisième paramètre, sizeof(buff), est faux. Ce doit être la taille d'un élément : sizeof *buff

  3. #3
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    1. Hallucinant. Il demande la taille d'un pointeur et non d'une adresse?
    2. Qu'est-ce que (*(char * const *)p1 donne en mots?


    Pourquoi (char * const *) et non pas (const char *)?
    Est-ce un pointeur de pointeur genre **argv ?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Hallucinant. Il demande la taille d'un pointeur et non d'une adresse?
    Il demande logiquement
    - Où commence le tableau
    - Le nombre d'éléments du tableau
    - La taille d'un élément du tableau
    Sinon, comment ferait-il pour se balader d'un élément à un autre dans le tableau ?

    Qu'est-ce que (*(char * const *)p1 donne en mots?
    Il manque une parenthèse.

    char * est un pointeur sur char
    char * const indique que c'est un pointeur constant sur char
    char * const * indique que c'est un pointeur sur un pointeur constant sur char

    const char * ou char const * indique un pointeur sur un char constant

  5. #5
    Membre très actif Avatar de J4e8a16n
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 271
    Par défaut
    Citation Envoyé par diogene Voir le message
    char * const * indique que c'est un pointeur sur un pointeur constant sur char

    (char * const *) == indique que c'est un pointeur sur un pointeur constant sur char comme const char ** ou char const ** (ou *argv[1] ?)

    *(char * const *) == const char **argv[1] ?

    Excusez ma difficulté à comprendre.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    (char * const *) == indique que c'est un pointeur sur un pointeur constant sur char comme const char ** ou char const ** (ou *argv[1] ?)
    Non.
    const char ** est un pointeur (pouvant être modifié) sur un pointeur (pouvant être modifié) sur un (des) char (ne pouvant pas être modifié).
    (char * const *) est un pointeur (pouvant être modifié) sur un pointeur (ne pouvant pas être modifié) sur un (des) char (pouvant être modifié)

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

Discussions similaires

  1. [xsl:fo] Mettre en forme du Xml (pas si simple !)
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 02/03/2006, 13h02
  2. [W3C] Valide W3C? Pas si simple qu'il y parait...
    Par Zenol dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 17/12/2005, 13h37
  3. requete sur 2 table (pas si simple)
    Par Sebou San dans le forum Requêtes
    Réponses: 7
    Dernier message: 29/11/2005, 14h08
  4. localtime pas si simple ...
    Par ustilago dans le forum Langage
    Réponses: 4
    Dernier message: 18/11/2005, 13h52
  5. Pipes => pas plus simple ?
    Par Jorus dans le forum MFC
    Réponses: 4
    Dernier message: 02/02/2005, 17h53

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