Partager via


_lsearch

Effectue une recherche linéaire pour une valeur ; l'ajoute à la fin de la liste si elle n'est pas trouvée. Des versions plus sécurisées de ces fonctions sont disponibles ; consultez _lsearch_s.

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 vers la base de la table à rechercher.

  • num
    Nombre d'éléments

  • width
    Largeur de chaque élément du 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, _lsearch retourne un pointeur vers l'élément du tableau à base qui correspond à key . Si la clé n'est pas trouvée, _lsearch retourne un pointeur sur l'élément récemment ajouté à la fin du tableau.

Notes

La fonction _lsearch 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, _lsearch ne nécessite pas que le tableau soit trié. Si key est introuvable, _lsearch l'ajoute à la fin de la table et incrémente num.

L'argument 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. _lsearch appelle la routine compare une ou plusieurs fois lors de la recherche, passant les pointeurs vers deux éléments de tableau à chaque appel: compare doit comparer les éléments et retourner ou 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

_lsearch

<Rechercher>

Pour plus d'informations sur la compatibilité, consultez Compatibilité dans l'introduction.

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

Équivalent .NET Framework

Non applicable. Pour appeler la fonction C standard, utilisez PInvoke. Pour plus d'informations, consultez Exemples d'appel de plateforme.

Voir aussi

Référence

Recherche et tri

bsearch

_lfind

_lsearch_s