Compartir a través de


_lfind

Realiza una búsqueda lineal de la clave especificada. Hay disponible una versión más segura de esta función; consulte _lfind_s.

Sintaxis

void *_lfind(
   const void *key,
   const void *base,
   unsigned int *num,
   unsigned int width,
   int (__cdecl *compare)(const void *, const void *)
);

Parámetros

key
Objeto que se va a buscar.

base
Puntero a la base de los datos de búsqueda.

number
Número de elementos de la matriz.

width
Ancho de los elementos de la matriz.

compare
Puntero a la rutina de comparación. El primer parámetro es un puntero a la clave de búsqueda. El segundo parámetro es un puntero al elemento de la matriz que se va a comparar con la clave.

Valor devuelto

Si se encuentra la clave, _lfind devuelve un puntero al elemento de la matriz en base que coincide con key. Si no se encuentra la clave, _lfind devuelve NULL.

Comentarios

La función _lfind realiza una búsqueda lineal del valor key en una matriz de number elementos, cada uno de ellos de width bytes. A diferencia bsearchde , _lfind no requiere que la matriz se ordene. El argumento base es un puntero a la base de la matriz que se va a buscar. El argumento compare es un puntero a una rutina proporcionada por el usuario que compara dos elementos de la matriz y luego devuelve un valor que especifica su relación. _lfind llama a la rutina compare una o varias veces durante la búsqueda, pasando punteros a dos elementos de la matriz en cada llamada. La rutina compare debe comparar los elementos y luego devolver un valor distinto de cero (es decir, los elementos son diferentes) o 0 (es decir, los elementos son idénticos).

Esta función valida sus parámetros. Si compare, o number es NULL, key o si base es y es NULL distinto de ceronumber, o si width es menor que cero, se invoca al controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, errno está establecido en EINVAL y la función devuelve NULL.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Requisitos

Routine Encabezado necesario
_lfind <search.h>

Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// 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

Vea también

Búsqueda y ordenación
_lfind_s
bsearch
_lsearch
qsort