LSEARCH(3) | FreeBSD Library Functions Manual | LSEARCH(3) |
名称
lsearch, lfind — 線形 (リニア) 検索と追加ライブラリ
Standard C Library (libc, -lc)書式
#include < search.h> void *
lsearch( const void *key, void *base, size_t *nelp, size_t width, int (*compar)(const void *, const void *));
void *
lfind( const void *key, const void *base, size_t *nelp, size_t width, int (*compar)(const void *, const void *));
解説
lsearch() と lfind() 関数は、配列の中を線形 (直線的) に渡り歩き、供給された比較関数を使用して、各要素 (エレメント) とシークされる (探される) ものとを比較します。key 引数は、検索されるものに一致する要素を指します。メモリ中の配列のアドレスは、 base 引数によって示されます。 1 つの要素の幅 (すなわち、 sizeof() によって返されるサイズ) は、 width 引数として渡されます。 (配列の要素の数には、予約されている空間がない) 配列に含まれる有効な要素の数は、 nelp によって指された整数で与えられます。 compar 引数は、2 つの引数を比較して、一致すれば 0 を返し、そうでなければ 0 以外を返す関数を指します。
配列に一致する要素が見つけられないなら、 lsearch() は、最後の要素の後ろの位置に key をコピーし、 nelp によって指される整数を増加します。
戻り値
lsearch() と lfind() 関数は、見つけられた最初の要素 (エレメント) へのポインタを返します。何も要素も見つからなかったなら、 lsearch() は、新たに追加された要素へのポインタを返すのに対して、 lfind() は、 NULL を返します。エラーが生じるなら、両方の関数は、 NULL を返します。使用例
#include <search.h> #include <stdio.h> #include <stdlib.h> static int element_compare(const void *p1, const void *p2) { int left = *(const int *)p1; int right = *(const int *)p2; return (left - right); } int main(int argc, char **argv) { const int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; size_t element_size = sizeof(array[0]); size_t array_size = sizeof(array) / element_size; int key; void *element; printf("Enter a number: "); if (scanf("%d", &key) != 1) { printf("Bad input0); return (EXIT_FAILURE); } element = lfind(&key, array, &array_size, element_size, element_compare); if (element != NULL) printf("Element found: %d0, *(int *)element); else printf("Element not found0); return (EXIT_SUCCESS); }
規格
lsearch() と lfind() 関数は、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合しています。歴史
lsearch() と lfind() 関数は、 4.2BSD で登場しました。 FreeBSD 5.0 で、それらは、 IEEE Std 1003.1-2001 (“POSIX.1”) に適合して再登場しました。April 21, 2013 | FreeBSD |