Искать запись в таблице
#include <search.h>void * lfind( const void *key,const void *base,unsigned *num,unsigned width,int (*compare)( const void *element1,const void *element2 ) );
0
, если element1 равно element2, или ненулевое значение, если элементы не равны.libc
Функция lfind() возвращает указатель на таблицу, указывающую, где можно найти запись.
![]() | Функция 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 X/Open Systems Interfaces Extension
Предыдущий раздел: Описание API системной библиотеки