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


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

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

  • width
    Ширина каждого элемента массива.

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

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

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

Заметки

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

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

Эта функция проверяет свои параметры. Если compare, key или num имеют значение NULL, или если base имеет значение NULL и *num отлично от нуля, или если width меньше нуля, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, то errno устанавливается в EINVAL, и функция возвращает NULL.

Требования

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

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

_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 ) );
}
  

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

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

См. также

Ссылки

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

bsearch

_lfind

_lsearch_s