Udostępnij za pośrednictwem


_lsearch

Wykonuje wyszukiwanie liniowe dla wartości; dodaje wartość na końcu listy, jeśli nie zostanie znaleziona. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz _lsearch_s.

Składnia

void *_lsearch(
   const void *key,
   void *base,
   unsigned int *num,
   unsigned int width,
   int (__cdecl *compare)(const void *, const void *)
);

Parametry

key
Obiekt do wyszukania.

base
Wskaźnik do podstawy tablicy do przeszukania.

number
Liczba elementów.

width
Szerokość każdego elementu tablicy.

compare
Wskaźnik do procedury porównania. Pierwszy parametr jest wskaźnikiem do klucza wyszukiwania. Drugi parametr jest wskaźnikiem do elementu tablicy, który ma być porównywany z kluczem.

Wartość zwracana

Jeśli klucz zostanie znaleziony, _lsearch zwraca wskaźnik do elementu tablicy w base tym miejscu pasuje keydo elementu . Jeśli klucz nie zostanie znaleziony, _lsearch zwraca wskaźnik do nowo dodanego elementu na końcu tablicy.

Uwagi

Funkcja _lsearch wykonuje liniowe wyszukiwanie wartości key w tablicy number elementów, każdy z bajtów width . W przeciwieństwie do bsearchmetody , _lsearch nie wymaga sortowania tablicy. Jeśli key nie zostanie znaleziony, _lsearch doda go na końcu tablicy i zwiększa numberwartość .

Argument compare jest wskaźnikiem do procedury dostarczonej przez użytkownika, która porównuje dwa elementy tablicy i zwraca wartość określającą ich relację. _lsearch wywołuje procedurę compare co najmniej raz podczas wyszukiwania, przekazując wskaźniki do dwóch elementów tablicy w każdym wywołaniu. compare musi porównać elementy i zwrócić albo niezerowe (co oznacza, że elementy są różne) lub 0 (co oznacza, że elementy są identyczne).

Ta funkcja weryfikuje jego parametry. Jeśli compareparametr , key lub NULLnumber ma NULL wartość , lub base jest niezerowy number lub width jest mniejszy niż zero, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametru. Jeśli wykonywanie jest dozwolone do kontynuowania, jest ustawione na EINVAL , errno a funkcja zwraca wartość NULL.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
_lsearch <search.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

// 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

Zobacz też

Wyszukiwanie i sortowanie
bsearch
_lfind
_lsearch_s