_lfind
Effectue une recherche linéaire portant sur la clé spécifiée. Une version plus sécurisée de cette fonction est disponible ; voir _lfind_s
.
Syntaxe
void *_lfind(
const void *key,
const void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Paramètres
key
Objet à rechercher.
base
Pointeur désignant la base de données de recherche.
number
Nombre d’éléments de tableau.
width
Largeur des éléments du tableau.
compare
Pointeur désignant la routine de comparaison. Le premier paramètre est un pointeur désignant la clé pour la recherche. Le second paramètre est un pointeur désignant l’élément de tableau à comparer à la clé.
Valeur retournée
Si la clé est trouvée, _lfind
retourne un pointeur désignant l’élément du tableau à base
qui correspond à key
. Si la clé est introuvable, _lfind
retourne NULL
.
Notes
La fonction _lfind
effectue une recherche linéaire portant sur la valeur key
dans un tableau de number
éléments, chacun d’une taille de width
octets. Contrairement bsearch
à , _lfind
ne nécessite pas le tri du tableau. L’argument base
est un pointeur désignant la base du tableau à explorer. L’argument compare
est un pointeur désignant une routine fournie par l’utilisateur qui compare deux éléments de tableau, puis retourne une valeur spécifiant leur relation. _lfind
appelle la routine compare
une ou plusieurs fois pendant la recherche, passant les pointeurs désignant deux éléments de tableau à chaque appel. La routine 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).
Cette fonction valide ses paramètres. Si compare
, key
ou number
est NULL
, ou si base
est NULL
et number
est différent de zéro, ou s’il width
est inférieur à zéro, le gestionnaire de paramètres non valide est appelé, comme décrit dans la validation de paramètre. Si l’exécution est autorisée à se poursuivre, errno
a la valeur EINVAL
et la fonction retourne NULL
.
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 |
---|---|
_lfind |
<search.h> |
Pour plus d’informations sur la compatibilité, consultez Compatibility.
Exemple
// crt_lfind.c
// This program uses _lfind to search a string array
// for an occurrence of "hello".
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare(const void *arg1, const void *arg2 )
{
return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
int main( )
{
char *arr[] = {"Hi", "Hello", "Bye"};
int n = sizeof(arr) / sizeof(char*);
char **result;
char *key = "hello";
result = (char **)_lfind( &key, arr,
&n, sizeof(char *), compare );
if( result )
printf( "%s found\n", *result );
else
printf( "hello not found!\n" );
}
Hello found