_lfind
執行所指定索引鍵的線性搜尋。 此函式有更安全的版本可供使用;請參閱 _lfind_s
。
語法
void *_lfind(
const void *key,
const void *base,
unsigned int *num,
unsigned int width,
int (__cdecl *compare)(const void *, const void *)
);
參數
key
要搜尋的物件。
base
搜尋資料基底的指標。
number
陣列元素數目。
width
陣列元素的寬度。
compare
比較常式的指標。 第一個參數是搜尋索引鍵的指標。 第二個參數是要與索引鍵比較之陣列元素的指標。
傳回值
如果找到索引鍵,_lfind
將指標傳回至 base
與 key
相符的陣列元素。 如果找不到索引鍵, _lfind
則傳 NULL
回 。
備註
_lfind
函式會在 number
個元素的陣列中執行線性搜尋,尋找 key
值,每個元素 width
個位元組。 不同於 bsearch
, _lfind
不需要排序陣列。 base
引數是要搜尋之陣列基底的指標。 compare
引數是使用者所提供之常式的指標,該常式比較兩個陣列元素,然後傳回一個指定其關聯性的值。 _lfind
在搜尋時會呼叫compare
常式一或多次,每次呼叫會將指標傳遞至兩個陣列元素。 compare
常式必須比較項目,然後傳回非零 (表示項目不同) 或 0 (表示項目完全相同)。
這個函式會驗證它的參數。 如果 compare
、 key
或 number
為 NULL
,或 base
如果 為 NULL
非number
零,或 width
如果 小於零,則會叫用無效的參數處理程式,如參數驗證中所述。 若允許繼續執行, errno
會設為 EINVAL
,且函式會傳回 NULL
中所述。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。
需求
常式 | 必要的標頭 |
---|---|
_lfind |
<search.h> |
如需相容性詳細資訊,請參閱相容性。
範例
// crt_lfind.c
// This program uses _lfind to search a string array
// for an occurrence of "hello".
#include <search.h>
#include <string.h>
#include <stdio.h>
int compare(const void *arg1, const void *arg2 )
{
return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
int main( )
{
char *arr[] = {"Hi", "Hello", "Bye"};
int n = sizeof(arr) / sizeof(char*);
char **result;
char *key = "hello";
result = (char **)_lfind( &key, arr,
&n, sizeof(char *), compare );
if( result )
printf( "%s found\n", *result );
else
printf( "hello not found!\n" );
}
Hello found