Partager via


_lsearch

Effectue une recherche linéaire portant sur une valeur ; l’ajoute en fin de liste si elle est introuvable. Une version plus sécurisée de cette fonction est disponible ; voir _lsearch_s.

Syntaxe

void *_lsearch(
   const void *key,
   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 du tableau à explorer.

number
Nombre d'éléments.

width
Largeur de chaque élément 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 un élément de tableau à comparer à la clé.

Valeur retournée

Si la clé est trouvée, _lsearch retourne un pointeur désignant l’élément du tableau à base qui correspond à key. Si la clé est introuvable, _lsearch retourne un pointeur vers l’élément qui vient d’être ajouté à la fin du tableau.

Notes

La fonction _lsearch 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à , _lsearch ne nécessite pas le tri du tableau. S’il key n’est pas trouvé, _lsearch l’ajoute à la fin du tableau et incrémente number.

L’argument 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. _lsearch appelle la routine 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 et 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
_lsearch <search.h>

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

Exemple

// crt_lsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main(void)
{
   char * wordlist[4] = { "hello", "thanks", "bye" };
                            // leave room to grow...
   int n = 3;
   char **result;
   char *key = "extra";
   int i;

   printf( "wordlist before _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );

   result = (char **)_lsearch( &key, wordlist,
                      &n, sizeof(char *), compare );

   printf( "wordlist after _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );
}

int compare(const void *arg1, const void *arg2 )
{
   return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
wordlist before _lsearch: hello thanks bye
wordlist after _lsearch: hello thanks bye extra

Voir aussi

Recherche et tri
bsearch
_lfind
_lsearch_s