_lsearch_s
値の線形探索を実行します。 CRT のセキュリティ機能の説明に従って、セキュリティが強化された_lsearch
のバージョン。
構文
void *_lsearch_s(
const void *key,
void *base,
unsigned int *num,
size_t size,
int (__cdecl *compare)(void *, const void *, const void *),
void * context
);
パラメーター
key
検索するオブジェクト。
base
検索する配列のベースへのポインター。
number
要素の数。
size
バイト単位での配列の各要素のサイズ。
compare
比較ルーチンへのポインター。 2 番目のパラメーターは、検索用のキーへのポインターです。 3 番目のパラメーターは、そのキーと比較する配列要素へのポインターです。
context
比較関数内でアクセスされることのあるオブジェクトへのポインター。
戻り値
key
が見つかった場合、_lsearch_s
は key
と一致する base
の配列要素のポインターを返します。 key
が見つからない場合、_lsearch_s
は配列の末尾に新しく追加された項目へのポインターを返します。
無効なパラメーターが関数に渡された場合、「パラメーターの検証で説明されているように、無効なパラメーター ハンドラー呼び出されます。 実行を続行できる場合、errno
が EINVAL
に設定され、関数から NULL
が返されます。 詳細については、「errno
」、「_doserrno
」、「_sys_errlist
」、および「_sys_nerr
」を参照してください。
エラー条件
key |
base |
compare |
number |
size |
errno |
---|---|---|---|---|---|
NULL |
任意 | 任意 | 任意 | 任意 | EINVAL |
任意 | NULL |
任意 | != 0 | 任意 | EINVAL |
任意 | 任意 | 任意 | 任意 | ゼロ | EINVAL |
任意 | 任意 | NULL |
1 つ | 任意 | EINVAL |
解説
_lsearch_s
関数は、number
要素の配列の値 key
に対する一方向の検索を、size
バイトごとに実行します。 bsearch_s
とは異なり、_lsearch_s
では配列を並べ替える必要はありません。 key
が見つからない場合は、配列の末尾_lsearch_s
追加し、number
インクリメントします。
compare
関数は、2 つの配列要素を比較してそれらの関係を指定する値を返すユーザー指定のルーチンへのポインターです。 compare
関数はまた、最初の引数としてコンテキストへのポインターを受け取ります。 _lsearch_s
は検索中に compare
を 1 回以上呼び出し、各呼び出しにおいて 2 つの配列要素へのポインターを渡します。 compare
は要素を比較し、ゼロ以外 (要素が異なる場合) または 0 (要素が同じ場合) を返す必要があります。
context
ポインターは、検索対象のデータ構造体がオブジェクトの一部であり、compare
関数でオブジェクトのメンバーにアクセスする必要がある場合に役立ちます。 たとえば、compare
関数のコードは void ポインターを該当するオブジェクト型にキャストして、そのオブジェクトのメンバーにアクセスできます。 context
ポインターを追加すると、静的変数を使用してデータをcompare
関数で使用できるようにするために、追加のコンテキストを使用して再入バグを回避できるため、_lsearch_s
のセキュリティが強化されます。
既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
_lsearch_s |
<search.h> |
互換性の詳細については、「 Compatibility」を参照してください。