bsearch(3) Library Functions Manual bsearch(3) NAZWA bsearch - binarnie przeszukuje posortowana tablice BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #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])); OPIS Funkcja bsearch() przeszukuje tablice obiektow nmemb, ktorej pierwszy element jest wskazywany przez base, w poszukiwaniu elementu pasujacego do obiektu wskazywanego przez key. Rozmiar kazdego z elementow tablicy okreslony jest przez size. Zawartosc tablicy powinna byc posortowana w kolejnosci rosnacej zgodnie z funkcja porownawcza wskazywana przez compar. Funkcja compar powinna przyjmowac dwa argumenty: wskaznik do obiektu key oraz do elementu tablicy i powinna zwracac liczbe calkowita mniejsza od zera, rowna zeru lub wieksza niz zero, jesli obiekt key okazal sie, odpowiednio, mniejszy, rowny lub wiekszy niz element tablicy. WARTOSC ZWRACANA Funkcja bsearch() zwraca wskaznik do pasujacego elementu tablicy lub NULL, jesli nie znaleziono takiego elementu. Jesli istnieje wiecej takich elementow, to nie jest okreslone, na ktory element bedzie wskazywac zwrocony wskaznik. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |bsearch() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY C11, POSIX.1-2008. HISTORIA POSIX.1-2001, C89, C99, SVr4, 4.3BSD. PRZYKLADY Ponizszy przyklad najpierw sortuje tablice struktur, uzywajac qsort(3), a nastepnie pobiera zadane elementy, uzywajac 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, "sty" }, { 2, "lut" }, { 3, "mar" }, { 4, "kwi" }, { 5, "maj" }, { 6, "cze" }, { 7, "lip" }, { 8, "sie" }, { 9, "wrz" }, {10, "lis" }, {11, "paz" }, {12, "gru" } }; 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': nieznany miesiac\n", argv[i]); else printf("%s: miesiac #%d\n", res->name, res->nr); } exit(EXIT_SUCCESS); } ZOBACZ TAKZE hsearch(3), lsearch(3), qsort(3), tsearch(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.8 2 maja 2024 r. bsearch(3)