_lsearch_s
Wykonuje wyszukiwanie liniowe dla wartości. Wersja z ulepszeniami zabezpieczeń _lsearch
zgodnie z opisem w temacie Funkcje zabezpieczeń w narzędziu CRT.
Składnia
void *_lsearch_s(
const void *key,
void *base,
unsigned int *num,
size_t size,
int (__cdecl *compare)(void *, const void *, const void *),
void * context
);
Parametry
key
Obiekt do wyszukania.
base
Wskaźnik do podstawy tablicy do przeszukania.
number
Liczba elementów.
size
Rozmiar każdego elementu tablicy w bajtach.
compare
Wskaźnik do procedury porównania. Drugi parametr jest wskaźnikiem do klucza wyszukiwania. Trzeci parametr jest wskaźnikiem do elementu tablicy, który ma być porównywany z kluczem.
context
Wskaźnik do obiektu, do którego można uzyskać dostęp w funkcji porównania.
Wartość zwracana
Jeśli key
zostanie znaleziona, _lsearch_s
zwraca wskaźnik do elementu tablicy, w base
którym jest on zgodny key
z parametrem . Jeśli key
nie zostanie znaleziony, _lsearch_s
zwraca wskaźnik do nowo dodanego elementu na końcu tablicy.
Jeśli do funkcji są przekazywane nieprawidłowe parametry, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, errno
jest ustawione na EINVAL
, a funkcja zwraca wartość NULL
. Aby uzyskać więcej informacji, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Warunki błędu
key |
base |
compare |
number |
size |
errno |
---|---|---|---|---|---|
NULL |
dowolny | dowolny | dowolny | dowolny | EINVAL |
dowolny | NULL |
dowolny | != 0 | dowolny | EINVAL |
dowolny | dowolny | dowolny | dowolny | zero | EINVAL |
dowolny | dowolny | NULL |
an | dowolny | EINVAL |
Uwagi
Funkcja _lsearch_s
wykonuje liniowe wyszukiwanie wartości key
w tablicy number
elementów, każdy z bajtów size
. W przeciwieństwie do bsearch_s
metody , _lsearch_s
nie wymaga sortowania tablicy. Jeśli key
nie zostanie znaleziona, _lsearch_s
dodaj ją na końcu tablicy i zwiększa number
wartość .
Funkcja 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ę. Funkcja compare
przyjmuje również wskaźnik do kontekstu jako pierwszy argument. _lsearch_s
wywołuje compare
co najmniej jeden raz podczas wyszukiwania, przekazując wskaźniki do dwóch elementów tablicy w każdym wywołaniu. compare
należy porównać elementy, a następnie zwrócić albo niezerowe (co oznacza, że elementy są różne) lub 0 (co oznacza, że elementy są identyczne).
Wskaźnik context
może być przydatny, jeśli przeszukana struktura danych jest częścią obiektu, a compare
funkcja musi uzyskiwać dostęp do elementów członkowskich obiektu. Na przykład kod w compare
funkcji może rzutować wskaźnik void na odpowiedni typ obiektu i uzyskać dostęp do elementów członkowskich tego obiektu. Dodanie wskaźnika zapewnia _lsearch_s
większe bezpieczeństwo, ponieważ można użyć dodatkowego context
kontekstu, aby uniknąć ponownych błędów związanych z używaniem zmiennych statycznych w celu udostępnienia danych compare
funkcji.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_lsearch_s |
<search.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.