_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
è NULL
o 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