bsearch_s
Nach oben zu Stdlib.h - Index
Header-Datei
stdlib.h
Kategorie
Suchen und Sortieren
Prototyp
void *bsearch_s(const void * __key, const void * __base,
rsize_t __nelem, rsize_t __width,
(_USERENTRY *__fcmp)(const void *k, const void *i, void *__context),
void *__context);
Beschreibung
Ersetzt bsearch und fügt Sicherheitserweiterungen hinzu.
bsearch_s durchsucht eine Tabelle (ein Array) mit __nelem Elementen und gibt die Adresse des ersten mit dem in __base definierten Suchschlüssel übereinstimmenden Elements zurück.
Die Größe der Elemente im Array wird in __width angegeben.
Die Vergleichsfunktion _fcmp muss mit der Aufrufkonvention _USERENTRY deklariert werden. Das Array, für das __fcmp aufgerufen wird, muss aufsteigend sortiert sein.
__fcmp wird mit drei Argumenten aufgerufen: k (das Schlüsselelement), y (ein Element im Array) und __context (der direkt an die Funktion __fcmp übergeben wird, um eine generischere Benutzerimplementierung zu gewährleisten). __fcmp gibt einen Integerwert gemäß den folgenden Regeln zurück:
- < 0 wenn *k < *y
- == 0 wenn *k == *y
- > 0 wenn *k > *y
Rückgabewert
bsearch_s gibt die Adresse des ersten Elements im Array zurück, das mit dem Suchschlüssel übereinstimmt. Wird keine Übereinstimmung gefunden, gibt bsearch_s Null zurück.
Beispiel
#include <stdlib.h>
#include <stdio.h>
typedef int (*fptr)(const void*, const void*, void*);
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2)
{
return(*p1 - *p2);
}
#pragma argsused
int lookup(int key)
{
int *itemptr;
/* The cast of (int(*)(const void *,const void*))
is needed to avoid a type mismatch error at
compile time */
itemptr = (int *) bsearch_s(&key, numarray, NELEMS(numarray),
sizeof(int), (fptr)numeric, NULL);
return (itemptr != NULL);
}
int main(void)
{
if (lookup(512))
printf("512 is in the table.\n");
else
printf("512 isn't in the table.\n");
return 0;
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |
+ |
+ |
+ |