Freigeben über


_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 NULLbeschrieben.

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

Siehe auch

Suchen und Sortieren
_lfind_s
bsearch
_lsearch
qsort