_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 bsearchpole _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 compareje nebo number key je nebo base je NULLa 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

Viz také

Vyhledávání a řazení
_lfind_s
bsearch
_lsearch
qsort