_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(表示元素相同)。
此函数验证其参数。 如果 compare
、key
或 number
为 NULL
,或者,如果 base
为 NULL
且 number
不为零,亦或者,如果 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