Condividi tramite


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

Vedi anche

Ricerca e ordinamento
bsearch
_lfind
_lsearch_s