_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_errlist
e _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à).