Sdílet prostřednictvím


_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 bsearchpole _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 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
_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

Viz také

Vyhledávání a řazení
bsearch
_lfind
_lsearch_s