_lsearch_s
Realiza una búsqueda lineal de un valor. Una versión de _lsearch
con mejoras de seguridad, como se describe en Características de seguridad en CRT.
Sintaxis
void *_lsearch_s(
const void *key,
void *base,
unsigned int *num,
size_t size,
int (__cdecl *compare)(void *, const void *, const void *),
void * context
);
Parámetros
key
Objeto que se va a buscar.
base
Puntero a la base de la matriz en la que se va a buscar.
number
Número de elementos.
size
Tamaño de cada elemento de la matriz expresado en bytes.
compare
Puntero a la rutina de comparación. El segundo parámetro es un puntero a la clave de búsqueda. El tercer parámetro es un puntero a un elemento de la matriz que se va a comparar con la clave.
context
Un puntero a un objeto al que se podría obtener acceso en la función de comparación.
Valor devuelto
Si se encuentra key
, _lsearch_s
devuelve un puntero al elemento de la matriz en base
que coincide con key
. Si key
no se encuentra, _lsearch_s
devuelve un puntero al elemento recién agregado al final de la matriz.
Si se pasan parámetros no válidos a la función, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, errno
se establece en EINVAL
y la función devuelve NULL
. Para obtener más información, veaerrno
, _doserrno
, _sys_errlist
y _sys_nerr
.
Condiciones del error
key |
base |
compare |
number |
size |
errno |
---|---|---|---|---|---|
NULL |
cualquiera | cualquiera | cualquiera | cualquiera | EINVAL |
cualquiera | NULL |
cualquiera | != 0 | cualquiera | EINVAL |
cualquiera | cualquiera | cualquiera | cualquiera | zero | EINVAL |
cualquiera | cualquiera | NULL |
an | cualquiera | EINVAL |
Comentarios
La función _lsearch_s
realiza una búsqueda lineal del valor key
en una matriz de number
elementos, cada uno de ellos de size
bytes. A diferencia bsearch_s
de , _lsearch_s
no requiere que la matriz se ordene. Si key
no se encuentra, _lsearch_s
lo agrega al final de la matriz e incrementa number
.
La función 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. La función compare
también toma el puntero al contexto como primer argumento. _lsearch_s
llama a compare
una o varias veces durante la búsqueda, pasando punteros a dos elementos de la matriz en cada llamada. 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).
El puntero context
puede ser útil si la estructura de datos de búsqueda forma parte de un objeto y la función compare
necesita obtener acceso a los miembros del objeto. Por ejemplo, el código de la función compare
puede convertir el puntero void en el tipo de objeto adecuado y acceder a los miembros de dicho objeto. La adición del context
puntero hace _lsearch_s
más segura porque se puede usar contexto adicional para evitar errores de reentrada asociados con el uso de variables estáticas para que los datos estén disponibles para la compare
función.
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 |
---|---|
_lsearch_s |
<search.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.