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


_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
Указатель на начало массива, где будет производиться поиск.

number
Число элементов.

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

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

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

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

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

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

Условия ошибок

key base compare number size errno
NULL любое любое любое любое EINVAL
любое NULL любое != 0 любое EINVAL
любое любое любое любое zero EINVAL
любое любое NULL an любое EINVAL

Замечания

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

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

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

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

Требования

Маршрут Обязательный заголовок
_lsearch_s <search.h>

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

См. также

Поиск и сортировка
bsearch_s
_lfind_s
_lsearch