Выполнить линейный поиск элемента в массиве
#include <search.h>void * lsearch( const void *key,const void *base,unsigned *num,unsigned width,int (*compare)( const void *element1,const void *element2 ) );
0
, если element1 равен element2, или ненулевое значение, если элементы не равны.libc
Функция lsearch() выполняет линейный поиск в массиве и возвращает указатель на массив, указывающий, где была найдена запись.
![]() | Если key не найден, он добавляется в конец массива и num увеличивается на единицу. |
Указатель на найденный или созданный элемент или NULL
, если произошла ошибка.
Эта программа создает массив указателей на аргументы argv, выполняя их поиск в массиве указателей NULL
. Поскольку ни один из элементов не будет найден, все они будут добавлены в массив.
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <search.h>int compare( const void *, const void * );int main( int argc, const char **argv ){int i;unsigned num = 0;char **array = (char **)calloc( argc, sizeof( char ** ) );for ( i = 1; i < argc; ++i ){lsearch( &argv[i], array, &num, sizeof( char ** ), compare );}for ( i = 0; i < num; ++i ){printf( "%s\n", array[i] );}return (EXIT_SUCCESS);}int compare( const void *op1, const void *op2 ){const char **p1 = (const char **)op1;const char **p2 = (const char **)op2;return (strcmp( *p1, *p2 ));}
Код выше использует следующий ввод:
one two one three four
Код выше генерирует следующий вывод:
$ ./a.out one two three four
POSIX 1003.1 X/Open Systems Interfaces Extension
Предыдущий раздел: Описание API системной библиотеки