Loading

NOM

       bsearch - Recherche dichotomique dans une table triée

SYNOPSIS

       #include <stdlib.h>

       void *bsearch(const void *key, const void *base,
                     size_t nmemb, size_t size,
                     int (*compar)(const void *, const void *));

       La  fonction  bsearch() recherche l’objet correspondant à key, dans une
       table de nmemb objets, commençant  à  l’adresse  base.  La  taille  des
       éléments de la table est indiquée dans size.

       Le contenu de la table doit être triée en ordre croissant par rapport à
       la fonction de comparaison référencée par  compar.  La  routine  compar
       doit  être  capable de recevoir deux arguments, le premier pointant sur
       l’objet key, et le second sur un  élément  de  la  table  (l’ordre  des
       arguments  est  toujours  respecté  par  bsearch).  Cette  routine doit
       retourner  une  valeur  entière  respectivement  inférieure,  égale  ou
       supérieure  à  zéro  si l’objet key est inférieur, égal, ou supérieur à
       l’élément de la table.

VALEUR RENVOYÉE

       La fonction bsearch() renvoie un  pointeur  sur  l’élément  du  tableau
       correspondant   à   celui  recherché,  ou  NULL  si  aucun  élément  ne
       correspond. Si plusieurs éléments de la table correspondent à  la  clé,
       celui qui est renvoyé n’est pas spécifié.

CONFORMITÉ

       SVr4, BSD 4.3, POSIX.1-2001, C89, C99

EXEMPLE

       L’exemple  suivant  trie  d’abord un tableau de structures en utilisant
       qsort(3), puis retrouve les éléments désirés en utilisant bsearch().

       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>

       struct mi {
           int nr;
           char *name;
       } months[] = {
           { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
           { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
           { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
       };

       #define nr_of_months (sizeof(months)/sizeof(struct mi))

       static int
       compmi(const void *m1, const void *m2)
       {
           struct mi *mi1 = (struct mi *) m1;
           struct mi *mi2 = (struct mi *) m2;
           return strcmp(mi1->name, mi2->name);
       }

       int
       main(int argc, char **argv)
       {
           int i;

           qsort(months, nr_of_months, sizeof(struct mi), compmi);
           for (i = 1; i < argc; i++) {
               struct mi key, *res;
               key.name = argv[i];
               res = bsearch(&key, months, nr_of_months,
                             sizeof(struct mi), compmi);
               if (res == NULL)
                   printf("'%s': unknown month\n", argv[i]);
               else
                   printf("%s: month #%d\n", res->name, res->nr);
           }
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

       hsearch(3), lsearch(3), qsort(3), tsearch(3)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été  traduite et mise à jour par Christophe
       Blaess <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis  par
       Alain  Portal  <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».

                               1er novembre 2003