본문으로 바로가기

바다야크

  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 테이블에서 테이터 검색 및 추가 함수 lsearch()

C언어 테이블에서 테이터 검색 및 추가 함수 lsearch()

· 댓글개 · 바다야크

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= 
]$
SNS 공유하기
💬 댓글 개
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.