_lfind
Effectue une recherche linéaire pour la clé spécifiée. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez _lfind_s.
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 vers la base de données de recherche.num
Nombre d'éléments du tableau.width
Largeur des éléments de tableau.compare
Pointeur vers la routine de comparaison. Le premier paramètre est un pointeur vers la clé pour la recherche. Le second paramètre est un pointeur vers un élément de tableau à comparer à la clé.
Valeur de retour
Si la clé est trouvée, _lfind retourne un pointeur vers l'élément du tableau à base qui correspond à key . Si la clé n'est pas trouvée _lfind retourne NULL.
Notes
La fonction _lfind effectue une recherche séquentielle pour la valeur key dans un tableau d'éléments de num éléments, chacun de width octets. Contrairement à bsearch, _lfind ne nécessite pas que le tableau soit trié. L'argument base est un pointeur vers la base du tableau à trier. La fonction compare est un pointeur vers une routine fournie à l'utilisateur, qui compare deux éléments de tableau et retourne une valeur qui spécifie leur relation. _lfind appelle la routine compare une ou plusieurs fois lors de la recherche, passant les pointeurs vers deux éléments de tableau à chaque appel: La routine compare doit comparer les éléments et puis retourner une valeur différente de zéro (c'est-à-dire que les éléments sont différents) ou 0 (ce qui signifie les éléments sont identiques).
Cette fonction valide ses paramètres. Si compare, key ou num est NULL, ou si base est différent de zéro, et *num est différent de zéro, ou si width est inférieure à zéro, le gestionnaire de paramètre non valide est appelé, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, errno est défini à EINVAL et la fonction retourne NULL.
Configuration requise
Routine |
En-tête requis |
---|---|
_lfind |
<Rechercher> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.
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" );
}
Équivalent .NET Framework
System::Collections::ArrayList::Contains