Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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