Freigeben über


_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 numberhinzugefü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 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
_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

Siehe auch

Suchen und Sortieren
bsearch
_lfind
_lsearch_s