Bagikan melalui


_lsearch

Melakukan pencarian linier untuk nilai; menambahkan ke akhir daftar jika tidak ditemukan. Versi fungsi ini yang lebih aman tersedia; lihat _lsearch_s.

Sintaks

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

Parameter

key
Objek yang akan dicari.

base
Penunjuk ke dasar array yang akan dicari.

number
Jumlah elemen.

width
Lebar setiap elemen array.

compare
Arahkan ke rutinitas perbandingan. Parameter pertama adalah penunjuk ke kunci untuk pencarian. Parameter kedua adalah penunjuk ke elemen array yang akan dibandingkan dengan kunci.

Nilai hasil

Jika kunci ditemukan, _lsearch mengembalikan penunjuk ke elemen array yang base cocok keydengan . Jika kunci tidak ditemukan, _lsearch mengembalikan penunjuk ke item yang baru ditambahkan di akhir array.

Keterangan

Fungsi ini _lsearch melakukan pencarian linier untuk nilai key dalam array number elemen, masing-masing width byte. Tidak seperti bsearch, _lsearch tidak mengharuskan array diurutkan. Jika key tidak ditemukan, _lsearch tambahkan ke akhir array dan kenaikan number.

Argumen compare adalah penunjuk ke rutinitas yang disediakan pengguna yang membandingkan dua elemen array dan mengembalikan nilai yang menentukan hubungan mereka. _lsearchcompare memanggil rutinitas satu atau beberapa kali selama pencarian, meneruskan penunjuk ke dua elemen array pada setiap panggilan. compare harus membandingkan elemen dan mengembalikan nonzero (artinya elemennya berbeda) atau 0 (artinya elemennya identik).

Fungsi ini memvalidasi parameternya. Jika compare, key atau number , NULLatau , atau jika base adalah NULL dan number bukan nol, atau jika width kurang dari nol, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno diatur ke EINVAL dan fungsi mengembalikan NULL.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
_lsearch <search.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

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

Baca juga

Mencari dan mengurutkan
bsearch
_lfind
_lsearch_s