Aracılığıyla paylaş


_lsearch

Bir değer için doğrusal arama gerçekleştirir; bulunamazsa listenin sonuna ekler. Bu işlevin daha güvenli bir sürümü kullanılabilir; bkz _lsearch_s. .

Sözdizimi

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

Parametreler

key
Aranacak nesne.

base
Aranacak dizi tabanının işaretçisi.

number
Öğe sayısı.

width
Her dizi öğesinin genişliği.

compare
Karşılaştırma yordamının işaretçisi. İlk parametre, arama anahtarının işaretçisidir. İkinci parametre, anahtarla karşılaştırılacak bir dizi öğesinin işaretçisidir.

Dönüş değeri

Anahtar bulunursa, _lsearch dizinin öğesiyle base eşleşen keybir işaretçi döndürür. Anahtar bulunamazsa, _lsearch dizinin sonunda yeni eklenen öğeye bir işaretçi döndürür.

Açıklamalar

işlevi, _lsearch baytların her width biri olan bir öğe dizisindeki number değer key için doğrusal bir arama gerçekleştirir. _lsearch'nin aksinebsearch, dizinin sıralanması gerekmez. bulunamazsa key , _lsearch dizinin sonuna ekler ve değerini artırır number.

compare Bağımsız değişken, iki dizi öğesini karşılaştıran ve ilişkilerini belirten bir değer döndüren, kullanıcı tarafından sağlanan yordamın işaretçisidir. _lsearch , her çağrıda compare iki dizi öğesine işaretçiler geçirerek, arama sırasında rutini bir veya daha fazla kez çağırır. compare öğeleri karşılaştırmalı ve sıfır olmayan (öğelerin farklı olduğu anlamına gelir) veya 0 (öğelerin aynı olduğu anlamına gelir) döndürmelidir.

Bu işlev parametrelerini doğrular. , compareveya number ise NULLveya ise NULLbase ve number sıfır değilse ya da sıfırdan küçüksewidth, parametre doğrulamasında açıklandığı gibi geçersiz parametre key işleyicisi çağrılır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevi döndürür NULL.

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

Yordam Gerekli başlık
_lsearch <search.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Örnek

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

Ayrıca bkz.

Arama ve sıralama
bsearch
_lfind
_lsearch_s