遵循规范

POSIX.1-2001,POSIX.1-2008,C89,C99,SVr4、4.3BSD。

说明

bsearch()函数搜索nmemb对象数组,该对象的初始成员由base指向,以查找与key指向的对象匹配的成员。数组每个成员的大小由大小指定。

数组的内容应根据compar引用的比较函数以升序排列。预计compar例程具有两个参数,该参数按此顺序指向键对象和数组成员,并且如果找到键对象,则应分别返回小于,等于或大于零的整数。小于,匹配或大于数组成员。

语法

#include <stdlib.h>

void *bsearch(const void *key, const void *base,
              size_t nmemb, size_t size,
              int (*compar)(const void *, const void *));

示例

下面的示例首先使用qsort(3)对结构数组进行排序,然后使用bsearch()检索所需的元素。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct mi {
    int nr;
    char *name;
} months[] = {
    { 1, "jan" }, { 2, "feb" }, { 3, "mar" }, { 4, "apr" },
    { 5, "may" }, { 6, "jun" }, { 7, "jul" }, { 8, "aug" },
    { 9, "sep" }, {10, "oct" }, {11, "nov" }, {12, "dec" }
};

#define nr_of_months (sizeof(months)/sizeof(months[0]))

static int
compmi(const void *m1, const void *m2)
{
    struct mi *mi1 = (struct mi *) m1;
    struct mi *mi2 = (struct mi *) m2;
    return strcmp(mi1->name, mi2->name);
}

int
main(int argc, char **argv)
{
    int i;

    qsort(months, nr_of_months, sizeof(struct mi), compmi);
    for (i = 1; i < argc; i++) {
        struct mi key, *res;
        key.name = argv[i];
        res = bsearch(&key, months, nr_of_months,
                      sizeof(struct mi), compmi);
        if (res == NULL)
            printf("aq%saq: unknown month\n", argv[i]);
        else
            printf("%s: month #%d\n", res->name, res->nr);
    }
    exit(EXIT_SUCCESS);
}

名称

bsearch-排序数组的二进制搜索

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

BSEARCH - Linux手册页

Linux程序员手册 第3部分
更新日期: 2020-06-09

返回值

bsearch()函数返回一个指向数组匹配成员的指针,如果找不到匹配项,则返回NULL。如果有多个与键匹配的元素,则未指定返回的元素。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
bsearch()Thread safetyMT-Safe

另外参见

hsearch(3),lsearch(3),qsort(3),tsearch(3)

日期:2019-08-20 17:59:55 来源:oir作者:oir