bsearch(3) Library Functions Manual bsearch(3) NOM bsearch - Recherche dichotomique dans un tableau trie BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include void *bsearch(const void key[.size], const void base[.size * .nmemb], size_t nmemb, size_t size, int (*compar)(const void [.size], const void [.size])); DESCRIPTION La fonction bsearch() recherche l'objet correspondant a key, dans un tableau de nmemb objets, commencant a l'adresse base. La taille de chaque element du tableau est indiquee dans size. Le contenu du tableau doit etre trie en ordre croissant par rapport a la fonction de comparaison referencee par compar. La routine compar doit etre capable de recevoir deux arguments, le premier pointant sur l'objet key, et le second sur un element du tableau (l'ordre des arguments est toujours respecte par bsearch). Cette routine doit retourner une valeur entiere respectivement inferieure, egale ou superieure a zero si l'objet key est inferieur, egal, ou superieur a l'element du tableau. VALEUR RENVOYEE La fonction bsearch() renvoie un pointeur sur l'element du tableau correspondant a celui recherche, ou NULL si aucun element ne correspond. Si plusieurs elements du tableau correspondent a la cle, celui qui est renvoye n'est pas specifie. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |bsearch() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ STANDARDS C11, POSIX.1-2008. HISTORIQUE POSIX.1-2001, C89, C99, SVr4, 4.3BSD. EXEMPLES L'exemple suivant trie d'abord un tableau de structures en utilisant qsort(3), puis retrouve les elements desires en utilisant bsearch(). #include #include #include #define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0])) struct mi { int nr; const char *name; }; static struct mi 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" } }; static int compmi(const void *m1, const void *m2) { const struct mi *mi1 = m1; const struct mi *mi2 = m2; return strcmp(mi1->name, mi2->name); } int main(int argc, char *argv[]) { qsort(months, ARRAY_SIZE(months), sizeof(months[0]), compmi); for (size_t i = 1; i < argc; i++) { struct mi key; struct mi *res; key.name = argv[i]; res = bsearch(&key, months, ARRAY_SIZE(months), sizeof(months[0]), 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) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot , Jean-Baptiste Holcroft et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 bsearch(3)