_lsearch
Führt eine lineare Suche nach einem Wert aus. Fügt ihn am Ende der Liste hinzu, falls nicht gefunden. Eine sicherere Version dieser Funktion ist verfügbar; siehe _lsearch_s
.
Syntax
void *_lsearch(
const void *key,
void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Parameter
key
Das Objekt, nach dem gesucht werden soll.
base
Zeiger auf der Basis des zu durchsuchenden Arrays.
number
Anzahl der Elemente.
width
Die Breite jedes Array-Elements.
compare
Ein Zeiger auf die Vergleichsroutine. Der erste Parameter ist ein Zeiger auf den Schlüssel für die Suche. Der zweite Parameter ist ein Zeiger auf das Arrayelement, das mit dem Schlüssel verglichen werden soll.
Rückgabewert
Wenn der Schlüssel gefunden wird, gibt _lsearch
einen Zeiger auf das Arrayelement bei base
zurück, das key
entspricht. Wenn der Schlüssel nicht gefunden wird, _lsearch
wird ein Zeiger auf das neu hinzugefügte Element am Ende des Arrays zurückgegeben.
Hinweise
Die _lsearch
-Funktion führt eine lineare Suche nach dem Wert key
in einem Array aus number
-Elementen durch, die jeweils aus width
-Bytes bestehen. Im Gegensatz dazu bsearch
_lsearch
muss das Array nicht sortiert werden. Wenn key
nicht gefunden wird, _lsearch
wird es am Ende des Arrays und inkrementiert number
hinzugefügt.
Das compare
-Argument ist ein Zeiger auf eine benutzerdefinierte Routine, die zwei Elemente des Arrays vergleicht und einen Wert zurückgibt, der die Beziehung angibt. _lsearch
ruft die compare
-Routine einmal oder mehrere Male während der Suche auf, wodurch bei jedem Aufruf Zeiger auf zwei Array-Elemente übergeben werden. compare
muss die Elemente vergleichen und entweder ungleich null (d.h. die Elemente unterscheiden sich) oder 0 (d.h. die Elemente sind identisch) zurückgeben.
Diese Funktion überprüft ihre Parameter. Wenn compare
, oder number
ist NULL
, oder wenn base
ist NULL
und ist und number
ist nicht null, oder wenn width
kleiner als Null, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. key
Wenn die weitere Ausführung zugelassen wird, wird errno
auf EINVAL
festgelegt, und die Funktion gibt NULL
beschrieben.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_lsearch |
<search.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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