bsearch_s

提供: RAD Studio
移動先: 案内検索

Stdlib.h:インデックス への移動


ヘッダー ファイル

stdlib.h

カテゴリ

検索およびソート ユーティリティ

プロトタイプ

void *bsearch_s(const void * __key, const void * __base,
                rsize_t __nelem, rsize_t __width,
                (_USERENTRY *__fcmp)(const void *k, const void *i, void *__context),
                void *__context);

説明

bsearch の代わりとなるもので、セキュリティ機能が強化されています。

bsearch_s は、メモリ内の __nelem 要素のテーブル(配列)を検索し、__base で定義された検索キーに一致する、テーブル内の最初のエントリのアドレスを返します。

配列内の各要素のサイズは、__width で指定します。

比較関数 __fcmp は、_USERENTRY 呼び出し規約と共に使用しなければなりません。 __fcmp が呼び出される配列は、昇順でソート済みでなければなりません。

__fcmp は、k(キー要素)、y(配列内の要素)、および__context の 3 つの引数を使用して呼び出されます。__context は、汎用的なユーザー実装を可能にするために __fcmp 関数に直接渡されます。 __fcmp は、以下のような値を取る整数を返します。

  • *k < *y の場合は < 0
  • *k == *y の場合は == 0
  • *k > *y の場合は > 0

戻り値

bsearch_s は、検索キーに一致する、配列内の最初の要素のアドレスを返します。 一致が見つからない場合、bsearch_s は NULL を返します。

#include <stdlib.h>
#include <stdio.h>
typedef int (*fptr)(const void*, const void*, void*);
#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))
int numarray[] = {123, 145, 512, 627, 800, 933};
int numeric (const int *p1, const int *p2)
{
  return(*p1 - *p2);
}
#pragma argsused
int lookup(int key)
{
  int  *itemptr;
  /* The cast of (int(*)(const void *,const void*))
      is needed to avoid a type mismatch error at
      compile time */
  itemptr = (int *) bsearch_s(&key, numarray, NELEMS(numarray),
      sizeof(int), (fptr)numeric, NULL);
  return (itemptr != NULL);
}
int main(void)
{
  if (lookup(512))
      printf("512 is in the table.\n");
  else
      printf("512 isn't in the table.\n");
  return 0;
}

移植性

POSIX Win32 ANSI C ANSI C++

+

+

+

+

関連項目