_lsearch
Provede lineární hledání hodnoty; přidá na konec seznamu, pokud nebyl nalezen. K dispozici je bezpečnější verze této funkce; viz ._lsearch_s
Syntaxe
void *_lsearch(
const void *key,
void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Parametry
key
Objekt, který chcete vyhledat.
base
Ukazatel na základ pole, který se má prohledávat.
number
Počet prvků
width
Šířka každého prvku pole
compare
Ukazatel na rutinu porovnání. Prvním parametrem je ukazatel na klíč pro hledání. Druhý parametr je ukazatel na prvek pole, který se má porovnat s klíčem.
Vrácená hodnota
Pokud je klíč nalezen, _lsearch
vrátí ukazatel na prvek pole, který base
odpovídá key
. Pokud se klíč nenajde, _lsearch
vrátí ukazatel na nově přidanou položku na konci pole.
Poznámky
Funkce _lsearch
provádí lineární vyhledávání hodnoty key
v matici number
prvků, z nichž každý z width
bajtů. Na rozdíl od bsearch
pole _lsearch
nevyžaduje řazení. Pokud key
se nenajde, _lsearch
přidá ho na konec pole a přírůstky number
.
Argument compare
je ukazatel na rutinu zadanou uživatelem, která porovnává dva prvky pole a vrací hodnotu určující jejich relaci. _lsearch
volá rutinu compare
jednou nebo vícekrát během hledání a předává ukazatele na dva prvky pole při každém volání. compare
musí porovnat prvky a vrátit nenulový (tj. prvky jsou odlišné) nebo 0 (tj. prvky jsou identické).
Tato funkce ověří své parametry. Pokud compare
je nebo number
key
je nebo base
je NULL
a je NULL
nenulová number
nebo pokud width
je menší než nula, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je povoleno pokračovat provádění, errno
je nastavena na EINVAL
a funkce vrátí NULL
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
_lsearch |
<search.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// 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