_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
Указатель на начало данных для поиска.num
Количество элементов массива.width
Ширина элементов массива.compare
Указатель на процедуру сравнения. Первый параметр — указатель на ключ для поиска. Второй параметр — указатель на элемент массива, который будет сравниваться с ключом.
Возвращаемое значение
Если ключ найден, _lfind возвращает указатель на элемент массива base, соответствующий key. Если ключ не найден, _lfind возвращает NULL.
Заметки
Функция _lfind выполняет линейный поиск значения key в массиве из num элементов шириной width. В отличие от bsearch, _lfind не требует сортированный массив. Аргумент base является указателем на начало массива для поиска. Аргумент compare является указателем на пользовательскую процедуру, которая сравнивает два элемента массива и возвращает значение, которое показывает, как соотносятся их значения. _lfind вызывает процедуру compare один или несколько раз во время поиска, передавая указатели на два элемента массива при каждом вызове: Процедура compare должна сравнивать элементы и возвращать или отличное от нуля (то есть элементы различаются) или 0 (если элементы совпадают).
Эта функция проверяет свои параметры. Если compare, key или num имеют значение NULL, или если base имеет значение NULL и *num отлично от нуля, или если width меньше нуля, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, то errno устанавливается в EINVAL и функция возвращает NULL.
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
_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" );
}
Эквивалент в .NET Framework
System::Collections::ArrayList::Contains