oracular (3) bsearch.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       bsearch - binarnie przeszukuje posortowaną tablicę

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <stdlib.h>

       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 tablicę obiektów nmemb, której pierwszy element jest wskazywany przez base,
       w poszukiwaniu elementu pasującego do obiektu wskazywanego przez key. Rozmiar każdego z elementów tablicy
       określony jest przez size.

       Zawartość  tablicy powinna być posortowana w kolejności rosnącej zgodnie z funkcją porównawczą wskazywaną
       przez compar. Funkcja compar powinna przyjmować dwa argumenty: wskaźnik do obiektu key oraz  do  elementu
       tablicy  i  powinna  zwracać  liczbę  całkowitą  mniejszą od zera, równą zeru lub większą niż zero, jeśli
       obiekt key okazał się, odpowiednio, mniejszy, równy lub większy niż element tablicy.

WARTOŚĆ ZWRACANA

       Funkcja bsearch() zwraca wskaźnik do pasującego elementu tablicy lub NULL, jeśli nie  znaleziono  takiego
       elementu.  Jeśli  istnieje  więcej  takich  elementów,  to  nie  jest  określone, na który element będzie
       wskazywać zwrócony wskaźnik.

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

       ┌───────────────────────────────────────────────────────────────┬────────────────────────┬───────────────┐
       │InterfejsAtrybutWartość       │
       ├───────────────────────────────────────────────────────────────┼────────────────────────┼───────────────┤
       │bsearch()                                                      │ Bezpieczeństwo wątkowe │ MT-bezpieczne │
       └───────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘

STANDARDY

       C11, POSIX.1-2008.

HISTORIA

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

PRZYKŁADY

       Poniższy przykład najpierw sortuje tablicę  struktur,  używając  qsort(3),  a  następnie  pobiera  żądane
       elementy, używając bsearch().

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

       #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 miesiąc\n", argv[i]);
               else
                   printf("%s: miesiąc #%d\n", res->name, res->nr);
           }
           exit(EXIT_SUCCESS);
       }

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony  podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej
       Krzysztofowicz  <ankry@green.mf.pg.gda.pl>,  Robert   Luberda   <robert@debian.org>   i   Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając się z GNU General Public License w wersji  3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy dyskusyjnej ⟨manpages-pl-
       list@lists.sourceforge.net⟩.