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