NAZWA¶
bsearch - binarne przeszukiwanie posortowanej tablicy
SKŁADNIA¶
#include <stdlib.h>
void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
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).
Interfejs |
Atrybut |
Wartość |
bsearch() |
Bezpieczeństwo wątkowe |
MT-Safe |
ZGODNE Z¶
POSIX.1-2001, POSIX.1-2008, C89, C99, SVr4, 4.3BSD.
PRZYKŁAD¶
Poniższe 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>
struct mi {
int nr;
char *name;
} months[] = {
{ 1, "sty" }, { 2, "lut" }, { 3, "mar" }, { 4, "kwi" },
{ 5, "maj" }, { 6, "cze" }, { 7, "lip" }, { 8, "sie" },
{ 9, "wrz" }, {10, "paź" }, {11, "lis" }, {12, "gru" }
};
#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': nieznany miesiąc\n", argv[i]);
else
printf("%s: miesiąc #%d\n", res->name, res->nr);
}
exit(EXIT_SUCCESS);
}
O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux
man-pages. Opis projektu, informacje dotyczące zgłaszania
błędów oraz najnowszą wersję
oryginału można znaleźć pod adresem
https://www.kernel.org/doc/man-pages/.
TŁUMACZENIE¶
Autorami polskiego tłumaczenia niniejszej strony podręcznika man
są: Adam Byrtek (PTM) <abyrtek@priv.onet.pl>, Andrzej
Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
<robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią
projektu manpages-pl; uwagi, pomoc, zgłaszanie
błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją
4.07 oryginału.