_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 key
do 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 bsearch
metody , _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 compare
parametr , key
lub NULL
number
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