Udostępnij przez


_lfind

Wykonuje wyszukiwanie liniowe dla określonego klucza. Dostępna jest bezpieczniejsza wersja tej funkcji; zobacz _lfind_s.

Składnia

void *_lfind(
   const void *key,
   const 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 danych wyszukiwania.

number
Liczba elementów tablicy.

width
Szerokość elementów 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, _lfind zwraca wskaźnik do elementu tablicy w base tym miejscu pasuje keydo elementu . Jeśli klucz nie zostanie znaleziony, _lfind zwraca wartość NULL.

Uwagi

Funkcja _lfind wykonuje liniowe wyszukiwanie wartości key w tablicy number elementów, każdy z bajtów width . W przeciwieństwie do bsearchmetody , _lfind nie wymaga sortowania tablicy. Argument base jest wskaźnikiem do podstawy tablicy do przeszukania. Argument compare jest wskaźnikiem do procedury dostarczonej przez użytkownika, która porównuje dwa elementy tablicy, a następnie zwraca wartość określającą ich relację. _lfind wywołuje procedurę compare co najmniej raz podczas wyszukiwania, przekazując wskaźniki do dwóch elementów tablicy w każdym wywołaniu. Rutyna compare musi porównać elementy, a następnie zwrócić 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
_lfind <search.h>

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

Przykład

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

Zobacz też

Wyszukiwanie i sortowanie
_lfind_s
bsearch
_lsearch
qsort