Provided by: manpages-dev_5.05-1_all bug

NAME

       bsearch - binary search of a sorted array

SYNOPSIS

       #include <stdlib.h>

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

DESCRIPTION

       The  bsearch()  function searches an array of nmemb objects, the initial member of which is pointed to by
       base, for a member that matches the object pointed to by key.  The size of each member of  the  array  is
       specified by size.

       The  contents  of  the  array  should  be  in ascending sorted order according to the comparison function
       referenced by compar.  The compar routine is expected to have two arguments which point to the key object
       and  to an array member, in that order, and should return an integer less than, equal to, or greater than
       zero if the key object is found, respectively, to be less than, to match, or be greater  than  the  array
       member.

RETURN VALUE

       The bsearch() function returns a pointer to a matching member of the array, or NULL if no match is found.
       If there are multiple elements that match the key, the element returned is unspecified.

ATTRIBUTES

       For an explanation of the terms used in this section, see attributes(7).

       ┌──────────┬───────────────┬─────────┐
       │InterfaceAttributeValue   │
       ├──────────┼───────────────┼─────────┤
       │bsearch() │ Thread safety │ MT-Safe │
       └──────────┴───────────────┴─────────┘

CONFORMING TO

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

EXAMPLE

       The example below first sorts an array of structures using  qsort(3),  then  retrieves  desired  elements
       using 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(months[0]))

       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);
       }

SEE ALSO

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

COLOPHON

       This  page  is  part  of  release  5.05  of  the  Linux man-pages project.  A description of the project,
       information  about  reporting  bugs,  and  the  latest  version  of  this   page,   can   be   found   at
       https://www.kernel.org/doc/man-pages/.

                                                   2017-09-15                                         BSEARCH(3)