Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- Watcom C Library Reference - <u>synopsis:</u> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
Synopsis:
    #include <stdlib.h>
    void *bsearch( const void *key,
                   const void *base,
                   size_t num,
                   size_t width,
                   int (*compar)( const void *pkey,
                                  const void *pbase) );

Description:
    The bsearch function performs a binary search of a sorted array of num
    elements, which is pointed to by base, for an item which matches the
    object pointed to by key.  Each element in the array is width bytes in
    size.  The comparison function pointed to by compar is called with two
    arguments that point to elements in the array.  The first argument pkey
    points to the same object pointed to by key.  The second argument pbase
    points to a element in the array.  The comparison function shall return
    an integer less than, equal to, or greater than zero if the key object
    is less than, equal to, or greater than the element in the array.

Returns:
    The bsearch function returns a pointer to the matching member of the
    array, or NULL if a matching object could not be found.  If there are
    multiple values in the array which are equal to the key, the return
    value is not necessarily the first occurrence of a matching value when
    the array is searched linearly.

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

    static const char *keywords[] = {
            "auto",
            "break",
            "case",
            "char",
            /* . */
            /* . */
            /* . */
            "while"
      };

    #define NUM_KW  sizeof(keywords) / sizeof(char *)

    int kw_compare( const void *p1, const void *p2 )
      {
        const char *p1c = (const char *) p1;
        const char **p2c = (const char **) p2;
        return( strcmp( p1c, *p2c ) );
      }

    int keyword_lookup( const char *name )
      {
        const char **key;
        key = (char const **) bsearch( name, keywords, NUM_KW,
                       sizeof( char * ),  kw_compare );
        if( key == NULL ) return( -1 );
        return key - keywords;
      }

    void main()
      {
        printf( "%d\n", keyword_lookup( "case" ) );
        printf( "%d\n", keyword_lookup( "crigger" ) );
        printf( "%d\n", keyword_lookup( "auto" ) );
      }
    //************ Sample program output ************
    //2
    //-1
    //0

    produces the following:

    2
    -1
    0

Classification:
    ANSI

Systems:
    All, Netware

See Also:
    lfind, lsearch, qsort

See Also: lfind lsearch

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson