_lsearch
Esegue una ricerca lineare di un valore; aggiunge alla fine dell'elenco se non viene trovato. È disponibile una versione più sicura di questa funzione; vedere _lsearch_s
.
Sintassi
void *_lsearch(
const void *key,
void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Parametri
key
Oggetto da cercare.
base
Puntatore alla base della matrice da cercare.
number
Numero di elementi.
width
Larghezza di ogni elemento della matrice.
compare
Puntatore alla routine di confronto. Il primo parametro è un puntatore alla chiave per la ricerca. Il secondo parametro è un puntatore a un elemento della matrice da confrontare con la chiave.
Valore restituito
Se la chiave viene trovata, _lsearch
restituisce un puntatore all'elemento della matrice in base
che corrisponde a key
. Se la chiave non viene trovata, _lsearch
restituisce un puntatore all'elemento appena aggiunto alla fine della matrice.
Osservazioni:
La funzione _lsearch
esegue una ricerca lineare del valore key
in una matrice di number
elementi, ognuno di width
byte. A differenza di bsearch
, _lsearch
non richiede l'ordinamento della matrice. Se key
non viene trovato, _lsearch
lo aggiunge alla fine della matrice e incrementa number
.
L'argomento compare
è un puntatore a una routine fornita dall'utente che confronta due elementi di matrice e restituisce un valore che specifica la relazione. _lsearch
chiama la routine compare
una o più volte durante la ricerca, passando i puntatori a due elementi di matrice per ogni chiamata. compare
deve confrontare gli elementi e 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 |
---|---|
_lsearch |
<search.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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