_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 key
do 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 bsearch
metody , _lsearch
nie wymaga sortowania tablicy. Jeśli key
nie zostanie znaleziony, _lsearch
doda go na końcu tablicy i zwiększa number
wartość .
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 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 |
---|---|
_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