_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
指向要搜索的数组基的指针。

number
元素数量。

width
各个数组元素的宽度。

compare
指向比较例程的指针。 第一个参数是指向要搜索的键的指针。 第二个参数是指向要与该键进行比较的数组元素的指针。

返回值

如果找到此键,则 _lsearch 返回指向 base 处的与 key 匹配的数组元素的指针。 如果未找到此键,则 _lsearch 返回指向数组末尾的新添加项的指针。

注解

_lsearch 函数对 number 元素的数组中的值 key 执行线性搜索,每个元素为 width 字节。 与 bsearch 不同的是,_lsearch 不要求对数组进行排序。 如果未找到 key_lsearch 会将其添加到数组末尾并增加 number

参数 compare 是指向用户提供的例程的指针,它比较两个数组元素,并返回指定其关系的值。 _lsearch 在搜索过程中一次或多次调用 compare 例程,将指针传递给每个调用上的两个数组元素。 compare 必须比较这些元素,并返回非零值(表示元素不同)或 0(表示元素相同)。

此函数验证其参数。 如果 comparekeynumberNULL,或者,如果 baseNULLnumber 不为零,亦或者,如果 width 小于零,则调用无效的参数处理程序,如参数验证中所述。 如果允许继续执行,则将 errno 设置为 EINVAL 并且该函数返回 NULL中所述。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
_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 ) );
}
wordlist before _lsearch: hello thanks bye
wordlist after _lsearch: hello thanks bye extra

另请参阅

搜索和排序
bsearch
_lfind
_lsearch_s