![]() |
![]() |
![]() |
![]() |
![]() |
This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs. |
Find an entry in a linear search table
#include <search.h>
void * lfind( const void * key,
const void * base,
unsigned * num,
unsigned width,
int ( * compare)(
const void * element1,
const void * element2 ) );
The comparison function must return 0 if element1 equals element2, or a nonzero value if the elements aren't equal.
libc
Use the -l c option to qcc to link against this library. This library is usually included automatically.
The lfind() function returns a pointer into a table indicating where an entry may be found.
![]() |
The lfind() function is the same as lsearch(), except that if the entry isn't found, it isn't added to the table, and a NULL pointer is returned. |
A pointer to the matching element, or NULL if there's no match or an error occurred.
This example program lets you know if the first command-line argument is a C keyword (assuming you fill in the keywords array with a complete list of C keywords):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <search.h>
static const char *keywords[] = {
"auto",
"break",
"case",
"char",
/* . */
/* . */
/* . */
"while"
};
int compare( const void *, const void * );
int main( int argc, const char *argv[] )
{
unsigned num = 5;
char *ptr;
if( argc <= 1 ) return EXIT_FAILURE;
ptr = lfind( &argv[1], keywords, &num, sizeof(char **), compare );
if( ptr == NULL ) {
printf( "'%s' is not a C keyword\n", argv[1] );
return EXIT_FAILURE;
} else {
printf( "'%s' is a C keyword\n", argv[1] );
return EXIT_SUCCESS;
}
/* You'll never get here. */
return EXIT_SUCCESS;
}
int compare( const void *op1, const void *op2 )
{
const char **p1 = (const char **) op1;
const char **p2 = (const char **) op2;
return( strcmp( *p1, *p2 ) );
}
| Safety: | |
|---|---|
| Cancellation point | No |
| Interrupt handler | No |
| Signal handler | Yes |
| Thread | Yes |
![]() |
![]() |
![]() |
![]() |