_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 key
bir 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. , compare
veya number
ise NULL
veya ise NULL
base
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