Condividi tramite


_lsearch_s

Esegue una ricerca lineare di un valore. Versione di con miglioramenti della _lsearch sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Sintassi

void *_lsearch_s(
   const void *key,
   void *base,
   unsigned int *num,
   size_t size,
   int (__cdecl *compare)(void *, const void *, const void *),
   void * context
);

Parametri

key
Oggetto da cercare.

base
Puntatore alla base della matrice da cercare.

number
Numero di elementi.

size
Dimensione di ogni elemento della matrice in byte.

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

context
Puntatore a un oggetto che potrebbe essere accessibile nella funzione di confronto.

Valore restituito

Se viene trovato key, _lsearch_s restituisce un puntatore all'elemento della matrice in base che corrisponde a key. Se key non viene trovato, _lsearch_s restituisce un puntatore all'elemento appena aggiunto alla fine della matrice.

Se alla funzione vengono passati parametri non validi, 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 altre informazioni, vedereerrno, _doserrno, _sys_errliste _sys_nerr.

Condizioni di errore

key base compare number size errno
NULL qualsiasi qualsiasi qualsiasi qualsiasi EINVAL
qualsiasi NULL qualsiasi != 0 qualsiasi EINVAL
qualsiasi qualsiasi qualsiasi qualsiasi zero EINVAL
qualsiasi qualsiasi NULL any qualsiasi EINVAL

Osservazioni:

La funzione _lsearch_s esegue una ricerca lineare del valore key in una matrice di number elementi, ognuno di size byte. A differenza di bsearch_s, _lsearch_s non richiede l'ordinamento della matrice. Se key non viene trovato, _lsearch_s lo aggiunge alla fine della matrice e incrementa number.

La funzione compare è un puntatore a una routine fornita dall'utente che confronta due elementi di matrice e restituisce un valore che specifica la relazione. La funzione compare accetta inoltre il puntatore al contesto come primo argomento. _lsearch_s chiama compare una o più volte durante la ricerca, passando i puntatori a due elementi della matrice per ogni chiamata. 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).

Il puntatore context può essere utile se la struttura dei dati sottoposta a ricerca fa parte di un oggetto e la funzione compare deve accedere ai membri dell'oggetto. Ad esempio, il codice nella funzione compare può eseguire il cast del puntatore void nel tipo di oggetto appropriato e accedere ai membri di tale oggetto. L'aggiunta context del puntatore rende _lsearch_s più sicuro perché è possibile usare un contesto aggiuntivo per evitare bug di reentrancy associati all'uso di variabili statiche per rendere i dati disponibili per la compare funzione.

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_s <search.h>

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

Vedi anche

Ricerca e ordinamento
bsearch_s
_lfind_s
_lsearch