bsearch.3: Improve the example.

Submitted by:	fernape
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D19902
This commit is contained in:
Konstantin Belousov 2019-07-17 19:29:55 +00:00
parent c73bd00a14
commit 345e740a1b
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=350091

View File

@ -32,7 +32,7 @@
.\" @(#)bsearch.3 8.3 (Berkeley) 4/19/94
.\" $FreeBSD$
.\"
.Dd May 15, 2019
.Dd July 17, 2019
.Dt BSEARCH 3
.Os
.Sh NAME
@ -93,26 +93,29 @@ A sample program that searches people by age in a sorted array:
#include <string.h>
struct person {
char name[5];
int age;
const char *name;
int age;
};
int
compare(const void *key, const void *array_member)
static int
compare(const void *a, const void *b)
{
int age = (intptr_t) key;
struct person person = *(struct person *) array_member;
const int *age;
const struct person *person;
return (age - person.age);
age = a;
person = b;
return (*age - person->age);
}
int
main()
main(void)
{
struct person *friend;
int age;
/* Sorted array */
struct person friends[6] = {
const struct person friends[] = {
{ "paul", 22 },
{ "anne", 25 },
{ "fred", 25 },
@ -120,22 +123,28 @@ main()
{ "mark", 35 },
{ "bill", 50 }
};
const size_t len = sizeof(friends) / sizeof(friends[0]);
size_t array_size = sizeof(friends) / sizeof(struct person);
friend = bsearch((void *)22, &friends, array_size, sizeof(struct person), compare);
age = 22;
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
assert(strcmp(friend->name, "paul") == 0);
printf("name: %s\enage: %d\en", friend->name, friend->age);
friend = bsearch((void *)25, &friends, array_size, sizeof(struct person), compare);
assert(strcmp(friend->name, "fred") == 0 || strcmp(friend->name, "anne") == 0);
age = 25;
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
/*
* For multiple elements with the same key, it is implementation
* defined which will be returned
*/
assert(strcmp(friend->name, "fred") == 0 ||
strcmp(friend->name, "anne") == 0);
printf("name: %s\enage: %d\en", friend->name, friend->age);
friend = bsearch((void *)30, &friends, array_size, sizeof(struct person), compare);
age = 30;
friend = bsearch(&age, friends, len, sizeof(friends[0]), compare);
assert(friend == NULL);
printf("friend aged 30 not found\en");
return (EXIT_SUCCESS);
}
.Ed
.Sh SEE ALSO