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


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

См. также

Поиск и сортировка
bsearch
_lfind
_lsearch_s