Condividi tramite


_lfind

Esegue una ricerca lineare della chiave specificata. È disponibile una versione più sicura di questa funzione; vedere _lfind_s.

Sintassi

void *_lfind(
   const void *key,
   const void *base,
   unsigned int *num,
   unsigned int width,
   int (__cdecl *compare)(const void *, const void *)
);

Parametri

key
Oggetto da cercare.

base
Puntatore alla base dei dati di ricerca.

number
Numero degli elementi della matrice.

width
Larghezza degli elementi della matrice.

compare
Puntatore alla routine di confronto. Il primo parametro è un puntatore alla chiave per la ricerca. Il secondo parametro è un puntatore all'elemento della matrice da confrontare con la chiave.

Valore restituito

Se la chiave viene trovata, _lfind restituisce un puntatore all'elemento della matrice in base che corrisponde a key. Se la chiave non viene trovata, _lfind restituisce NULL.

Osservazioni:

La funzione _lfind esegue una ricerca lineare del valore key in una matrice di number elementi, ognuno di width byte. A differenza di bsearch, _lfind non richiede l'ordinamento della matrice. L'argomento base è un puntatore alla base della matrice in cui eseguire la ricerca. L'argomento compare è un puntatore a una routine fornita dall'utente che confronta due elementi di matrice e quindi restituisce un valore che ne specifica la relazione. _lfind chiama la routine compare una o più volte durante la ricerca, passando i puntatori a due elementi di matrice per ogni chiamata. La routine compare deve confrontare gli elementi e quindi restituire un valore diverso da zero (che indica che gli elementi sono diversi) o 0 (che indica che gli elementi sono identici).

Questa funzione convalida i relativi parametri. key Se compare, o number è NULLo se base è NULL e number è diverso da zero o se width è minore di zero, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno viene impostato su EINVAL e la funzione restituisce NULL.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Ciclo Intestazione obbligatoria
_lfind <search.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// 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

Vedi anche

Ricerca e ordinamento
_lfind_s
bsearch
_lsearch
qsort