_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(表示元素相同)。

此函数验证其参数。 如果 comparekeynumberNULL,或者,如果 baseNULLnumber 不为零,亦或者,如果 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

另请参阅

搜索和排序
_lfind_s
bsearch
_lsearch
qsort