_lfind
Provede lineární vyhledávání zadaného klíče. K dispozici je bezpečnější verze této funkce; viz ._lfind_s
Syntaxe
void *_lfind(
const void *key,
const 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 vyhledávacích dat.
number
Počet prvků pole
width
Šířka prvků 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, _lfind
vrátí ukazatel na prvek pole, který base
odpovídá key
. Pokud se klíč nenajde, _lfind
vrátí hodnotu NULL
.
Poznámky
Funkce _lfind
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 _lfind
nevyžaduje řazení. Argument base
je ukazatel na základ pole, který se má prohledávat. Argument compare
je ukazatel na rutinu zadanou uživatelem, která porovnává dva prvky pole a poté vrátí hodnotu určující jejich relaci. _lfind
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í. Rutina compare
musí porovnat prvky a pak vrátit nenulový (což znamená, že prvky jsou odlišné) nebo 0 (což znamená, že 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 |
---|---|
_lfind |
<search.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
// crt_lfind.c
// This program uses _lfind to search a string array
// for an occurrence of "hello".
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare(const void *arg1, const void *arg2 )
{
return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
int main( )
{
char *arr[] = {"Hi", "Hello", "Bye"};
int n = sizeof(arr) / sizeof(char*);
char **result;
char *key = "hello";
result = (char **)_lfind( &key, arr,
&n, sizeof(char *), compare );
if( result )
printf( "%s found\n", *result );
else
printf( "hello not found!\n" );
}
Hello found