_lsearch

执行线性搜索值;添加到结束列表中,如果未找到。 此功能的一种较为安全的版本可用; _lsearch_s参见。

void *_lsearch(
   const void *key,
   void *base,
   unsigned int *num,
   unsigned int width,
   int (__cdecl *compare)(const void *, const void *) 
);

参数

  • key
    搜索的对象。

  • base
    对要搜索的基础数组的指针。

  • num
    元素的数目。

  • width
    每个数组元素的宽度。

  • compare
    对比较实例的指针。 第一个参数是指向搜索的键。 第二个参数是指向数组元素与密钥进行比较。

返回值

如果找到键时, _lsearch 返回指向该数组的元素中的 base 匹配 key。 如果未找到键时, _lsearch 返回指向该新添加的项在数组的末尾。

备注

_lsearch 函数在数组 num 组件,每个执行线性搜索该值 keywidth 字节。 不同 bsearch, _lsearch 不需要数组进行排序。 如果找不到 key , _lsearch 添加到数组的末尾并增加 num。

compare 参数是指向比较两个数组元素并返回指定它们之间的关系的值为用户提供的实例。 要在搜索时,_lsearch 调用 compare 实例一次或多次,通过指向在每个的两个数组元素调用。 compare 必须比较元素并返回非零 (表示元素完全不同的) 或 0 (表示组件的相同)。

此功能验证其参数。 如果 compare、 key 或 num 是 NULL,或者,如果 base 为空且 *num 不为零,或者,如果 width 小于零,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续, errno 设置为 EINVAL ,函数返回 NULL。

要求

实例

必需的头

_lsearch

search.h

有关更多兼容性信息,请参见中介绍的 兼容性

示例

// crt_lsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main(void)
{
   char * wordlist[4] = { "hello", "thanks", "bye" };
                            // leave room to grow...
   int n = 3;
   char **result;
   char *key = "extra";
   int i;

   printf( "wordlist before _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );

   result = (char **)_lsearch( &key, wordlist, 
                      &n, sizeof(char *), compare );

   printf( "wordlist after _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );
}

int compare(const void *arg1, const void *arg2 )
{
   return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

搜索和排序

bsearch

_lfind

_lsearch_s