_lfind
Выполняет линейный поиск указанного ключа. Доступна более безопасная версия этой функции; см. раздел _lfind_s
.
Синтаксис
void *_lfind(
const void *key,
const void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Параметры
key
Искомый объект.
base
Указатель на начало данных, где будет производиться поиск.
number
Число элементов массива.
width
Ширина элементов массива.
compare
Указатель на подпрограмму сравнения. Первый параметр — это указатель на ключ для поиска. Второй параметр — это указатель на элемент массива, который будет сравниваться с ключом.
Возвращаемое значение
Если ключ найден, функция _lfind
возвращает указатель на элемент массива base
, соответствующий key
. Если ключ не найден, _lfind
возвращается NULL
.
Замечания
Функция _lfind
выполняет линейный поиск значения key
в массиве из number
элементов шириной width
каждый. В отличие bsearch
от этого, _lfind
не требует сортировки массива. Аргумент base
является указателем на начало массива, в котором осуществляется поиск. Аргумент compare
является указателем на пользовательскую подпрограмму, которая сравнивает два элемента массива и возвращает значение, показывающее, как соотносятся их значения. Во время поиска функция _lfind
вызывает подпрограмму compare
один или несколько раз, передавая указатели на два элемента массива при каждом вызове. Подпрограмма compare
должна сравнивать элементы и возвращать либо отличное от нуля значение (если элементы различаются), либо 0 (если элементы идентичны).
Эта функция проверяет свои параметры. Если compare
значение имеет number
key
значение или имеет number
NULL
NULL
base
значение ненулевого значения или width
меньше нуля, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, для errno
задается значение EINVAL
, и функция возвращает значение NULL
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
_lfind |
<search.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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