_lsearch
Выполняет линейный поиск значения и добавляет значение в конец списка, если оно не найдено. Доступна более безопасная версия этой функции; см. раздел _lsearch_s
.
Синтаксис
void *_lsearch(
const void *key,
void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
Параметры
key
Искомый объект.
base
Указатель на начало массива, где будет производиться поиск.
number
Число элементов.
width
Ширина каждого элемента массива.
compare
Указатель на подпрограмму сравнения. Первый параметр — это указатель на ключ для поиска. Второй параметр — это указатель на элемент массива, который будет сравниваться с ключом.
Возвращаемое значение
Если ключ найден, функция _lsearch
возвращает указатель на элемент массива base
, соответствующий key
. Если ключ не найден, _lsearch
возвращает указатель на только что добавленный элемент в конце массива.
Замечания
Функция _lsearch
выполняет линейный поиск значения key
в массиве из number
элементов шириной width
каждый. В отличие bsearch
от этого, _lsearch
не требует сортировки массива. Если key
он не найден, _lsearch
добавляет его в конец массива и увеличивается number
.
Аргумент compare
является указателем на пользовательскую подпрограмму, которая сравнивает два элемента массива и возвращает значение, показывающее, как соотносятся их значения. Во время поиска функция _lsearch
вызывает подпрограмму compare
один или несколько раз, передавая указатели на два элемента массива при каждом вызове. Функция compare
должна сравнивать элементы и возвращать либо отличное от нуля значение (если элементы различаются), либо 0 (если элементы идентичны).
Эта функция проверяет свои параметры. Если compare
значение имеет number
key
значение или имеет number
NULL
NULL
base
значение ненулевого значения или width
меньше нуля, вызывается обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение может быть продолжено, для errno
задается значение EINVAL
, и функция возвращает значение NULL
.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
_lsearch |
<search.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// crt_lsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main(void)
{
char * wordlist[4] = { "hello", "thanks", "bye" };
// leave room to grow...
int n = 3;
char **result;
char *key = "extra";
int i;
printf( "wordlist before _lsearch:" );
for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
printf( "\n" );
result = (char **)_lsearch( &key, wordlist,
&n, sizeof(char *), compare );
printf( "wordlist after _lsearch:" );
for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
printf( "\n" );
}
int compare(const void *arg1, const void *arg2 )
{
return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
wordlist before _lsearch: hello thanks bye
wordlist after _lsearch: hello thanks bye extra