_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> |
Дополнительные сведения о совместимости см. в разделе Совместимость.