_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
는 key
와 일치하는 base
에서 배열의 요소에 대한 포인터를 반환합니다. 키를 찾을 _lsearch
수 없으면 배열 끝에 새로 추가된 항목에 대한 포인터를 반환합니다.
설명
_lsearch
함수는 각각 width
바이트인 number
요소의 배열에서 key
값에 대해 선형 검색을 수행합니다. 와 달리 bsearch
배열 _lsearch
을 정렬할 필요가 없습니다. 찾을 _lsearch
수 없으면 key
배열의 끝에 추가하고 증분합니다number
.
compare
인수는 두 배열 요소를 비교하여 해당 관계를 지정하는 값을 반환하는 사용자가 제공한 루틴에 대한 포인터입니다. _lsearch
는 검색 중에 compare
루틴을 한 번 이상 호출하며 각 호출에서 두 배열 요소에 대한 포인터를 전달합니다. compare
는 요소를 비교하고 0이 아닌 값(요소가 다르다는 의미) 또는 0(요소가 동일하다는 의미)을 반환합니다.
이 함수는 해당 매개 변수의 유효성을 검사합니다. compare
key
0 number
NULL
이 아니면 0이 아닌 경우 base
NULL
number
또는 0보다 작은 경우 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