_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 key
dengan . 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. _lsearch
compare
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
, NULL
atau , 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk