Anzeigen: Delphi C++
Anzeigeeinstellungen

bsearch_s

Aus RAD Studio
Wechseln zu: Navigation, Suche

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, int (_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++

+

+

+

+

Siehe auch

In anderen Sprachen