lfind()

Искать запись в таблице

Прототип:

#include <search.h>
void * lfind( const void *key,
const void *base,
unsigned *num,
unsigned width,
int (*compare)( const void *element1,
const void *element2 ) );

Аргументы:

key
Объект для поиска.
base
Указатель на первый элемент в таблице.
num
Указатель на целое число, содержащее текущее количество элементов в таблице.
width
Размер элемента в байтах.
compare
Указатель на пользовательскую функцию, которую lfind() вызывает для сравнения элемента массива с key. Аргументы функции сравнения: Функция сравнения должна возвращать 0, если element1 равно element2, или ненулевое значение, если элементы не равны.

Библиотека:

libc

Описание:

Функция lfind() возвращает указатель на таблицу, указывающую, где можно найти запись.


Note: Функция lfind() аналогична lsearch(), за исключением того, что, если запись не найдена, она не добавляется в таблицу, и возвращается указатель NULL.

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

Указатель на соответствующий элемент или NULL, если совпадения нет или произошла ошибка.

Примеры:

Этот пример программы позволяет узнать, является ли первый аргумент командной строки ключевым словом языка Cи (при условии, что предварительно был заполнен массив ключевых слов keywords полным списком ключевых слов языка Cи):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
static const char *keywords[] = {
"auto",
"break",
"case",
"char",
/* . */
"while"
};
int compare( const void *, const void * );
int main( int argc, const char *argv[] )
{
unsigned num = 5;
char *ptr;
if ( argc <= 1 )
return (EXIT_FAILURE);
ptr = lfind( &argv[1], keywords, &num, sizeof( char ** ), compare );
if ( ptr == NULL )
{
printf( "'%s' is not a C keyword\n", argv[1] );
return (EXIT_FAILURE);
} else {
printf( "'%s' is a C keyword\n", argv[1] );
return (EXIT_SUCCESS);
}
/* You'll never get here. */
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 ));
}

Классификация:

POSIX 1003.1 XSI

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

bsearch(), lsearch()




Предыдущий раздел: Описание API системной библиотеки