Поделиться через


_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 NULLbase значение ненулевого значения или 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

См. также

Поиск и сортировка
_lfind_s
bsearch
_lsearch
qsort