Partager via


_lsearch_s

Effectue une recherche linéaire portant sur une valeur. Version des améliorations de _lsearch sécurité décrites dans les fonctionnalités de sécurité du CRT.

Syntaxe

void *_lsearch_s(
   const void *key,
   void *base,
   unsigned int *num,
   size_t size,
   int (__cdecl *compare)(void *, const void *, const void *),
   void * context
);

Paramètres

key
Objet à rechercher.

base
Pointeur désignant la base du tableau à explorer.

number
Nombre d'éléments.

size
Taille de chaque élément de tableau en octets.

compare
Pointeur désignant la routine de comparaison. Le deuxième paramètre est un pointeur désignant la clé pour la recherche. Le troisième paramètre est un pointeur désignant un élément de tableau à comparer à la clé.

context
Pointeur désignant un objet accessible dans la fonction de comparaison.

Valeur retournée

Si key est trouvé, _lsearch_s retourne un pointeur désignant l’élément du tableau à base qui correspond à key. S’il key n’est pas trouvé, _lsearch_s retourne un pointeur vers l’élément nouvellement ajouté à la fin du tableau.

Si des paramètres non valides sont passés à la fonction, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à se poursuivre, errno est défini sur EINVAL et la fonction retourne NULL. Pour plus d'informations, voir errno, _doserrno, _sys_errlist et _sys_nerr.

Conditions d’erreur

key base compare number size errno
NULL n'importe laquelle tous tous tous EINVAL
tous NULL n'importe laquelle != 0 n'importe laquelle EINVAL
tous tous tous n'importe laquelle zero EINVAL
n'importe laquelle n'importe laquelle NULL an n'importe laquelle EINVAL

Notes

La fonction _lsearch_s effectue une recherche linéaire portant sur la valeur key dans un tableau de number éléments, chacun d’une taille de size octets. Contrairement bsearch_sà , _lsearch_s ne nécessite pas le tri du tableau. S’il key n’est pas trouvé, _lsearch_s il l’ajoute à la fin du tableau et incrémente number.

La fonction compare est un pointeur désignant une routine fournie par l’utilisateur qui compare deux éléments de tableau et retourne une valeur spécifiant leur relation. La fonction compare accepte également le pointeur désignant le contexte comme premier argument. _lsearch_s appelle compare une ou plusieurs fois pendant la recherche, passant les pointeurs désignant deux éléments de tableau à chaque appel. compare doit comparer les éléments, puis retourner une valeur différente de zéro (les éléments sont différents) ou 0 (les éléments sont identiques).

Le pointeur context peut être utile si la structure de données explorée fait partie d’un objet et que la fonction compare doit accéder aux membres de l’objet. Par exemple, le code dans la fonction compare peut effectuer un cast du pointeur void vers le type d’objet approprié et accéder aux membres de cet objet. L’ajout du context pointeur rend _lsearch_s plus sécurisé, car un contexte supplémentaire peut être utilisé pour éviter les bogues de réentrance associés à l’utilisation de variables statiques pour rendre les données disponibles pour la compare fonction.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis
_lsearch_s <search.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Voir aussi

Recherche et tri
bsearch_s
_lfind_s
_lsearch