C함수 테이블에서 테이터 검색 및 추가 lsearch()
메모리 테이블에서 테이터를 검색하고 찾으면 메모리 테이블의 주소를 반환하고, 찾지 못하면 테이블에 추가한 후 역시 테이블의 주소를 반환합니다.
- 헤더: search.h
- 형태: void *lsearch(const void *key, void *base, size_t *nelp, size_t width,
int (*compar)(const void *, const void *)) - 인수: const void *key 찾으려는 자료의 포인터 주소
void *base 찾는 대상이 되는 테이블 포인터 주소
size_t *nelp table에 들어 있는 실제 데이터 개수
size_t width 한 개 요소의 크기
int (*compar)(const void *, const void *) 두 요소를 비교하기 위한 함수 포인터 - 반환: void * 찾은 데이터 요소의 포인터 주소
C언어 lsearch() 함수 예제
#include <stdio.h>
#include <search.h>
#include <string.h> // memset,
int compare( const void *cmp1, const void *cmp2)
{
return strcmp( (char *)cmp1, (char *)cmp2);
}
#define SIZE_TABLE 5
#define SIZE_ITEM 100
int main( void)
{
char table[SIZE_TABLE][SIZE_ITEM] = {}; // 문자열 포인터를 초기화
char *ptr;
int count;
int ndx;
printf( "\n\n********* 1\n\n");
for (ndx = 0; ndx < SIZE_TABLE; ndx++)
printf( "%d= %s\n", ndx, table[ndx]);
printf( "\n\n********* 2\n\n");
count = 0;
ptr = (char *)lsearch( "forum", table, &count, SIZE_ITEM, compare);
printf( "반환된 문자열= %s\n", ptr);
printf( "아이템 개수= %d\n", count);
for (ndx = 0; ndx < SIZE_TABLE; ndx++)
printf( "%d= %sn", ndx, table[ndx]);
printf( "\n\n********* 3\n\n");
ptr = (char *)lsearch( "falinux", table, &count, SIZE_ITEM, compare);
printf( "반환된 문자열= %s\n", ptr);
printf( "아이템 개수= %d\n", count);
for (ndx = 0; ndx < SIZE_TABLE; ndx++)
printf( "%d= %s\n", ndx, table[ndx]);
printf( "\n\n********* 4\n\n");
ptr = (char *)lsearch( "com", table, &count, SIZE_ITEM, compare);
printf( "반환된 문자열= %s\n", ptr);
printf( "아이템 개수= %d\n", count);
for (ndx = 0; ndx < SIZE_TABLE; ndx++)
printf( "%d= %s\n", ndx, table[ndx]);
printf( "\n\n********* 5\n\n");
ptr = (char *)lsearch( "falinux", table, &count, SIZE_ITEM, compare);
printf( "반환된 문자열= %s\n", ptr);
printf( "아이템 개수= %d\n", count);
for (ndx = 0; ndx < SIZE_TABLE; ndx++)
printf( "%d= %s\n", ndx, table[ndx]);
return 0;
}
C언어 lsearch() 예제 실행 결과
]$ ./a.out
********* 1
0=
1=
2=
3=
4=
********* 2
반환된 문자열= forum
아이템 개수= 1
0= forum
1=
2=
3=
4=
********* 3
반환된 문자열= falinux
아이템 개수= 2
0= forum
1= falinux
2=
3=
4=
********* 4
반환된 문자열= com
아이템 개수= 3
0= forum
1= falinux
2= com
3=
4=
********* 5
반환된 문자열= falinux
아이템 개수= 3
0= forum
1= falinux
2= com
3=
4=
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 테이블에서 테이터 검색 함수 lfind() (0) | 2020.03.14 |
---|---|
C언어 상용 대수 값 구하기 함수 log10() (0) | 2020.03.13 |
C언어 자연 대수 값을 구하기 함수 log() (0) | 2020.03.13 |