#include<stdio.h>
#include<stdlib.h>
#include<search.h>
#include<string.h>
/*
* void *lfind(const void *key, const void *base, size_t *nmemb,
size_t size, int(*compar)(const void *, const void *));
if found
return the pointer
else
return NULL
//========================================
void *lsearch(const void *key, void *base, size_t *nmemb,
size_t size, int(*compar)(const void *, const void *));
if found
return the pointer
else
insert the key at the end of array_list, and return the pointer
*/
struct city{
int rank;
char *name;
};
typedef struct city city_t;
city_t china_city[] = {
{1, "shanghai"},
{2, "beijing"},
{3, "shenzhen"},
{4, "tianjin"},
{5, "chongqing"},
{6, "chengdu"},
{7, "wuhan"},
{8, "xian"}
};
int compare(const void* city1, const void* city2){
return strcmp(((city_t *)city1)->name, ((city_t *)city2)->name);
}
int main(int argc, char **argv){
size_t SIZE = sizeof(china_city)/sizeof(china_city[0]); //size_t is important!
printf("SIZE = %d\n", SIZE);
//================================
city_t key;
key.name = "tianjin";
city_t *find = (city_t *)lfind(&key, china_city, &SIZE, sizeof(city_t), compare);
if(find)
printf("found! rank = %d, name = %s\n", find->rank, find->name);
else
printf("not found.\n");
//================================
city_t key2 = {32, "luoyang"};
find = lsearch(&key2, china_city, &SIZE, sizeof(city_t), compare);
if(find)
printf("found! rank = %d, name = %s\n", find->rank, find->name);
else
printf("not found.\n");
printf("now, SIZE = %d\n", SIZE);
return 0;
}