Freigeben über


_lfind_s

Führt eine lineare Suche für den angegebenen Schlüssel aus. Eine Version von _lfind mit werden, wie in Sicherheitsfunktionen in der CRT beschrieben.

void *_lfind_s(
   const void *key,
   const void *base,
   unsigned int *num,
   size_t size,
   int (__cdecl *compare)(void *, const void *, const void *),
   void * context
);

Parameter

  • key
    Planen Sie für Suche für ein.

  • base
    Zeiger zur Basis von Suchendaten.

  • num
    Zahl Arrayelemente.

  • size
    Größe von Arrayelementen in Bytes.

  • compare
    Zeiger auf die Vergleichsroutine. Der erste Parameter ist der context Zeiger. Der zweite Parameter ist ein für Such- zu verschlüsseln, Zeiger. Der dritte Parameter ist ein Zeiger mit Schlüssel verglichen werden Arrayelement.

  • context
    Ein Zeiger auf ein Objekt, auf das möglicherweise in der Vergleichsfunktion zugegriffen wird.

Rückgabewert

Wenn die Schlüssel gefunden wird, gibt _lfind_s einen Zeiger auf das Element des Arrays bei diesem base Entspricht key zurück. Wenn der Schlüssel nicht gefunden wird, gibt _lfind_sNULL zurück.

Wenn ungültige Parameter an die Funktion übergeben werden, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, wird errno auf EINVAL gesetzt, und die Funktion gibt NULL zurück.

Fehlerbedingungen

Schlüssel

base

compare

num

size

errno

NULL

any

any

any

any

EINVAL

any

NULL

any

!= 0

any

EINVAL

any

any

any

any

0 (Null)

EINVAL

any

any

NULL

an

any

EINVAL

Hinweise

Die _lfind_s-Funktion führt eine lineare Suche für den Wert key in einem num - Array Elemente, jedes von width Bytes aus. Anders als bsearch_s erfordert _lfind_s das Array nicht sortiert werden. Das base-Argument ist ein Zeiger zur Basis des zu durchsuchenden Arrays. Das compare-Argument ist ein Zeiger auf eine vom Benutzer bereitgestellten Routine, die zwei Arrayelemente und vergleicht dann einen Wert zurückgibt, der die Beziehung angibt. _lfind_s ruft die Routine compare mindestens einmal während der Suche auf und übergibt den context Zeiger und die Zeiger auf zwei Arrayelementen auf jedem Aufruf. Die Routine compare muss die Elemente anschließend den Rückholwert ungleich 0 (null) (Bedeutung, dass die Elemente unterscheiden) oder das 0 (vergleichen die Elemente signifikant, befinden) identisch.

_lfind_s entspricht _lfind außer der Addition des context Zeigers für Argumente der Vergleichsfunktion und der Parameterliste der Funktion ähnelt. Der context Zeiger kann nützlich sein, wenn die gesuchte Datenstruktur Teil eines Objekts ist und die compare-Funktion Member des Objekts zugreifen muss. Die compare-Funktion kann den void-Zeiger in die entsprechenden Objekttypen aufgelistet umwandeln und Member dieses Objekts zugreifen. Die Einführung des Parameters context macht _lfind_s sicherer, da zusätzliche Kontext verwendet werden kann, um die Reentranzfehler zu vermeiden, die mithilfe von statischen Variablen, um Daten zur Verfügung stehen die compare-Funktion zugeordnet sind.

Anforderungen

Routine

Erforderlicher Header

_lfind_s

<search.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität in der Einführung.

Beispiel

// crt_lfind_s.cpp
// This program uses _lfind_s to search a string array,
// passing a locale as the context.
// compile with: /EHsc
#include <stdlib.h>
#include <stdio.h>
#include <search.h>
#include <process.h>
#include <locale.h>
#include <locale>
#include <windows.h>
using namespace std;

// The sort order is dependent on the code page.  Use 'chcp' at the
// command line to change the codepage.  When executing this application,
// the command prompt codepage must match the codepage used here:

#define CODEPAGE_850

#ifdef CODEPAGE_850
// Codepage 850 is the OEM codepage used by the command line,
// so \x00e1 is the German Sharp S

char *array1[] = { "wei\x00e1", "weis", "annehmen", "weizen", "Zeit",
                   "weit" };

#define GERMAN_LOCALE "German_Germany.850"

#endif

#ifdef CODEPAGE_1252
   // If using codepage 1252 (ISO 8859-1, Latin-1), use \x00df
   // for the German Sharp S
char *array1[] = { "wei\x00df", "weis", "annehmen", "weizen", "Zeit",
                   "weit" };

#define GERMAN_LOCALE "German_Germany.1252"

#endif

// The context parameter lets you create a more generic compare.
// Without this parameter, you would have stored the locale in a
// static variable, thus making it vulnerable to thread conflicts
// (if this were a multithreaded program).

int compare( void *pvlocale, const void *str1, const void *str2)
{
    char *s1 = *(char**)str1;
    char *s2 = *(char**)str2;

    locale& loc = *( reinterpret_cast< locale * > ( pvlocale));

    return use_facet< collate<char> >(loc).compare(
       s1, s1+strlen(s1),
       s2, s2+strlen(s2) );
}

void find_it( char *key, char *array[], unsigned int num, locale &loc )
{
   char **result = (char **)_lfind_s( &key, array, 
                      &num, sizeof(char *), compare, &loc );
   if( result )
      printf( "%s found\n", *result );
   else
      printf( "%s not found\n", key );
}

int main( )
{
   find_it( "weit", array1, sizeof(array1)/sizeof(char*), locale(GERMAN_LOCALE) );
}
  

.NET Framework-Entsprechung

Contains

Siehe auch

Referenz

Suchen und Sortieren

bsearch_s

_lsearch_s

qsort_s

_lfind