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


_lsearch_s

Выполняет линейный поиск значения. Это версия _lsearch с усовершенствованиями безопасности, как описано в Функции безопасности в CRT.

void *_lsearch_s(
   const void *key,
   void *base,
   unsigned int *num,
   size_t size,
   int (__cdecl *compare)(void *, const void *, const void *),
   void * context
);

Параметры

  • key
    Искомый объект.

  • base
    Указатель на начало массива для поиска.

  • num
    Количество элементов.

  • size
    Размер каждого элемента в байтах.

  • compare
    Указатель на процедуру сравнения. Второй параметр — указатель на ключ для поиска. Третий параметр — указатель на элемент массива, который будет сравниваться с ключом.

  • context
    Указатель на объект, доступ к которому можно получить в функции сравнения.

Возвращаемое значение

Если ключ key найден, _lsearch_s возвращает указатель на элемент массива base, соответствующий key. Если ключ key не найден, _lsearch_s возвращает указатель на вновь добавленный в конец массива элемент.

Если функции переданы недопустимые параметры, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эта функция устанавливает errno в EINVAL и возвращает NULL. Дополнительные сведения см. в разделе errno, _doserrno, _sys_errlist, and _sys_nerr.

Условия возникновения ошибки

key

base

compare

num

size

errno

NULL

any

any

any

any

EINVAL

any

NULL

any

!= 0

any

EINVAL

any

any

any

any

нуль

EINVAL

any

any

NULL

any

any

EINVAL

Заметки

Функция _lsearch_s выполняет линейный поиск значения key в массиве из num элементов шириной width. В отличие от bsearch_s, _lsearch_s не требует сортированный массив. Если key не найден, _lsearch_s добавляет его в конец массива и увеличивает num.

Функция compare является указателем на пользовательскую процедуру, которая сравнивает два элемента массива и возвращает значение, которое показывает, как соотносятся их значения. Функция compare также принимает указатель на контекст в качестве первого аргумента. _lsearch_s вызывает процедуру compare один или несколько раз во время поиска, передавая указатели на два элемента массива при каждом вызове: compare должна сравнивать элементы и возвращать или отличное от нуля значение (то есть элементы различаются), или 0 (если элементы совпадают).

Указатель context может быть полезен, если искомая структура данных является частью объекта и функции compare требуется доступ к членам объекта. Например, код в функции compare может привести указатель к соответствующему типу объекта и получить доступ к членам этого объекта. Добавление указателя context делает _lsearch_s более безопасной, поскольку наличие дополнительного контекста может использоваться для предотвращения ошибок повторного входа, связанных с использованием статических переменных, чтобы сделать данные доступными для функции compare.

Требования

Подпрограмма

Обязательный заголовок

_lsearch_s

<search.h>

Дополнительные сведения о совместимости см. в разделе Совместимость во введении.

Эквивалент в .NET Framework

Неприменимо. Для вызова стандартной функции C используйте PInvoke. Для получения дополнительной информации см. Примеры вызовов неуправляемого кода.

См. также

Ссылки

Сортировка и поиск

bsearch_s

_lfind_s

_lsearch