Afficher : Object Pascal C++
Préférences d'affichage

bsearch_s

De Appmethod Topics

Remonter à stdlib.h - Index


Fichier en-tête

stdlib.h

Catégorie

Utilitaires de recherche et de tri

Prototype

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);

Description

Remplace bsearch en ajoutant des améliorations relatives à la sécurité.

bsearch_s effectue une recherche dans un tableau de __nelem éléments en mémoire et renvoie l'adresse de la première entrée du tableau qui correspond à la clé de recherche définie par __base.

La taille de chaque élément du tableau est spécifiée par __width.

La fonction de comparaison _fcmp doit être utilisée avec la convention d'appel _USERENTRY. Le tableau sur lequel __fcmp est appelée doit être trié en ordre ascendant.

__fcmp est appelée avec trois arguments : k (l'élément clé), y (un élément du tableau) et __context (qui est passé directement à la fonction __fcmp afin de permettre une implémentation utilisateur plus générique). __fcmp renvoie un entier qui prend ses valeurs comme suit :

  • < 0 si *k < *y
  • == 0 si *k == *y
  • > 0 si *k > *y

Valeur renvoyée

bsearch_s renvoie l'adresse du premier élément du tableau qui correspond à la clé de recherche. Si aucune correspondance n'est trouvée, bsearch_s renvoie alors null.

Exemple

#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é

POSIX Win32 ANSI C ANSI C++

+

+

+

+

Voir aussi

Outils personnels
Autres langues