_lfind
Führt eine lineare Suche für den angegebenen Schlüssel aus. Eine sicherere Version dieser Funktion ist verfügbar; siehe _lfind_s
.
Syntax
void *_lfind(
const void *key,
const 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 die Basis der Suchdaten.
number
Die Anzahl der Arrayelemente.
width
Die Breite von Arrayelementen.
compare
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 _lfind
einen Zeiger auf das Arrayelement bei base
zurück, das key
entspricht. Wenn der Schlüssel nicht gefunden wird, _lfind
wird zurückgegeben NULL
.
Hinweise
Die _lfind
-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
_lfind
muss das Array nicht sortiert werden. Das base
-Argument ist ein Zeiger auf die Basis des zu suchenden Arrays. Das compare
-Argument ist ein Zeiger auf eine benutzerdefinierte Routine, die zwei Arrayelemente vergleicht und einen Wert zurückgibt, der die Beziehung angibt. _lfind
ruft die compare
-Routine einmal oder mehrere Male während der Suche auf, wodurch bei jedem Aufruf Zeiger auf zwei Array-Elemente übergeben werden. Die compare
-Routine muss die Elemente vergleichen und anschließend 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 |
---|---|
_lfind |
<search.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// 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