Share via


_lsearch

執行值的線性搜尋;如果找不到,則新增至清單結尾。 此函式有更安全的版本可供使用;請參閱 _lsearch_s

語法

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

參數

key
要搜尋的物件。

base
要搜尋之陣列的基底指標。

number
項目數。

width
每個陣列元素的寬度。

compare
比較常式的指標。 第一個參數是搜尋索引鍵的指標。 第二個參數是要與索引鍵比較之陣列元素的指標。

傳回值

如果找到索引鍵,_lsearch 將指標傳回至 basekey 相符的陣列元素。 如果找不到索引鍵, _lsearch 則會在陣列結尾傳回新加入專案的指標。

備註

_lsearch 函式會在 number 個元素的陣列中執行線性搜尋,尋找 key 值,每個元素 width 個位元組。 不同于 bsearch_lsearch 不需要排序陣列。 如果 key 找不到 , _lsearch 請將它新增至陣列結尾,並遞增 number

compare 引數是使用者所提供之常式的指標,該常式比較兩個陣列元素,然後傳回一個指定其關聯性的值。 _lsearch 在搜尋時會呼叫compare 常式一或多次,每次呼叫會將指標傳遞至兩個陣列元素。 compare 必須比較元素,然後傳回非零 (表示元素不同) 或 0 (表示元素完全相同)。

這個函式會驗證它的參數。 如果 comparekeynumberNULL ,或 base 如果 為 NULLnumber 零,或 width 如果 小於零,則會叫用不正確參數處理常式,如參數驗證 中所述 。 若允許繼續執行, errno 會設為 EINVAL ,且函式會傳回 NULL中所述。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

需求

常式 必要的標頭
_lsearch <search.h>

如需相容性詳細資訊,請參閱相容性

範例

// 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

另請參閱

搜尋和排序
bsearch
_lfind
_lsearch_s