_lsearch_lsearch

ある値に関して一方向に検索を実行し、見つからない場合はリストの末尾に追加します。Performs a linear search for a value; adds to end of list if not found. この関数のセキュリティが強化されたバージョンについては、「_lsearch_s」をご覧ください。A more secure version of this function is available; see _lsearch_s.

構文Syntax

void *_lsearch(
   const void *key,
   void *base,
   unsigned int *num,
   unsigned int width,
   int (__cdecl *compare)(const void *, const void *)
);

パラメーターParameters

keykey
検索するオブジェクト。Object to search for.

basebase
検索する配列のベースへのポインター。Pointer to the base of array to be searched.

numbernumber
要素の数。Number of elements.

widthwidth
配列の各要素の幅。Width of each array element.

comparecompare
比較ルーチンへのポインター。Pointer to the comparison routine. 最初のパラメーターは、検索用のキーへのポインターです。The first parameter is a pointer to the key for search. 2 番目のパラメーターは、そのキーと比較する配列要素へのポインターです。The second parameter is a pointer to an array element to be compared with the key.

戻り値Return Value

キーが見つかった場合 _lsearch配列の要素へのポインターを返します基本と一致するキーします。If the key is found, _lsearch returns a pointer to the element of the array at base that matches key. キーが見つからない場合 _lsearch配列の末尾に新しく追加された項目へのポインターを返します。If the key is not found, _lsearch returns a pointer to the newly added item at the end of the array.

RemarksRemarks

_Lsearch関数は、値に関して線形探索を実行します。キーの配列のの各要素は、バイト。The _lsearch function performs a linear search for the value key in an array of number elements, each of width bytes. 異なりbsearch_lsearch配列を並べ替えるには必要ありません。Unlike bsearch, _lsearch does not require the array to be sorted. 場合キーが見つからない _lsearchインクリメント、配列の末尾に追加します。If key is not found, _lsearch adds it to the end of the array and increments number.

比較引数が 2 つの配列要素を比較し、それらの関係を示す値を返します、ユーザー指定のルーチンへのポインター。The compare argument is a pointer to a user-supplied routine that compares two array elements and returns a value specifying their relationship. _lsearch呼び出し、比較ルーチンを 1 つまたは複数回呼び出しごとに 2 つの配列要素へのポインターを渡す、検索中にします。_lsearch calls the compare routine one or more times during the search, passing pointers to two array elements on each call. 比較要素を比較し、いずれかを返す必要があります (つまり、要素が異なる) 0 以外の値または 0 (つまり、要素が同じ場合)。compare must compare the elements and return either nonzero (meaning the elements are different) or 0 (meaning the elements are identical).

この関数は、パラメーターを検証します。This function validates its parameters. 場合比較キーまたはNULL、または基本NULL0 以外の場合、またはが小さい」の説明に従って、0 よりも、無効なパラメーター ハンドラーが呼び出さはパラメーターの検証です。If compare, key or number is NULL, or if base is NULL and number is nonzero, or if width is less than zero, the invalid parameter handler is invoked, as described in Parameter Validation. 続けるには、実行が許可された場合errnoに設定されているEINVAL 、関数を返しますNULLします。If execution is allowed to continue, errno is set to EINVAL and the function returns NULL.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
_lsearch_lsearch <search.h><search.h>

互換性の詳細については、「 互換性」を参照してください。For more compatibility information, see Compatibility.

Example

// crt_lsearch.c
#include <search.h>
#include <string.h>
#include <stdio.h>

int compare( const void *arg1, const void *arg2 );

int main(void)
{
   char * wordlist[4] = { "hello", "thanks", "bye" };
                            // leave room to grow...
   int n = 3;
   char **result;
   char *key = "extra";
   int i;

   printf( "wordlist before _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );

   result = (char **)_lsearch( &key, wordlist,
                      &n, sizeof(char *), compare );

   printf( "wordlist after _lsearch:" );
   for( i=0; i<n; ++i ) printf( " %s", wordlist[i] );
   printf( "\n" );
}

int compare(const void *arg1, const void *arg2 )
{
   return( _stricmp( * (char**)arg1, * (char**)arg2 ) );
}
wordlist before _lsearch: hello thanks bye
wordlist after _lsearch: hello thanks bye extra

関連項目See also

検索と並べ替えSearching and Sorting
bsearchbsearch
_lfind_lfind
_lsearch_s_lsearch_s