_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