_lsearch
Performs a linear search for a value; adds to end of list if not found. A more secure version of this function is available; see _lsearch_s.
void *_lsearch( const void *key, void *base, unsigned int *num, unsigned int width, int (__cdecl *compare)(const void *, const void *) );
The _lsearch function performs a linear search for the value key in an array of num elements, each of width bytes. Unlike bsearch, _lsearch does not require the array to be sorted. If key is not found, _lsearch adds it to the end of the array and increments num.
The compare argument is a pointer to a user-supplied routine that compares two array elements and returns a value specifying their relationship. _lsearch calls the compare routine one or more times during the search, passing pointers to two array elements on each call. compare must compare the elements and return either nonzero (meaning the elements are different) or 0 (meaning the elements are identical).
This function validates its parameters. If compare, key or num is NULL, or if base is NULL and *num is nonzero, or if width is less than zero, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, errno is set to EINVAL and the function returns NULL.
Routine | Required header |
|---|---|
_lsearch | <search.h> |
For more compatibility information, see Compatibility in the Introduction.
// 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 ) );
}
Not applicable. To call the standard C function, use PInvoke. For more information, see Platform Invoke Examples.