본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 테이블에서 테이터 검색 함수 lfind()

C언어 테이블에서 테이터 검색 함수 lfind()

· 댓글개 · 바다야크

C함수 테이블에서 테이터 검색 lfind()

메모리 테이블에서 테이터를 검색하고 찾으면 메모리 테이블의 주소를 반환하고, 찾지 못하면 테이블에 추가한 후 역시 테이블의 주소를 반환합니다.

  • 헤더: search.h
  • 형태: void *lfind(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 * 찾은 데이터 요소의 포인터 주소

메모리 테이블은 같은 크기의 2중 배열을 말합니다.

char table[10][100] = { "forum", "falinux", "com"};

이 있다면 100 byte를 하나의 자료로 해서 10개까지 담을 수 있습니다.

lfind( "falinux", ....)

로 검색하면 2 번째 배열 요소의 주소를 반환하게 됩니다.

lfind( "jwmx", ....);

로 검색했다면 NULL을 반환합니다. 또한 예로 문자열을 말씀드렸습니다만 문자열이 아닌 일반 바이너리 데이터도 사용할 수 있습니다.

C언어 lfind() 함수 예제

#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]  = { "jwmx", "badayak", "com"};     // 문자열 포인터를 초기화
   char *ptr;
   size_t   count;
   int   ndx;

   printf( "\n\n********* 1\n\n");
   
   count = 3;
   ptr   = (char *)lfind( "jwmx", table, &count, SIZE_ITEM, compare);
   
   printf( "반환된 문자열= %s\n", ptr);
   printf( "아이템   개수= %ld\n", count);
   for (ndx = 0; ndx < SIZE_TABLE; ndx++)
      printf( "%d= %s\n", ndx, table[ndx]);


   printf( "\n\n********* 2\n\n");
   
   ptr   = (char *)lfind( "badayak", table, &count, SIZE_ITEM, compare);
   
   printf( "반환된 문자열= %s\n", ptr);
   printf( "아이템   개수= %ld\n", count);
   for (ndx = 0; ndx < SIZE_TABLE; ndx++)
      printf( "%d= %s\n", ndx, table[ndx]);

   return 0;
}

C언어 lfind() 예제 실행 결과

]$ ./a.out


********* 1

반환된 문자열= jwmx
아이템   개수= 3
0= jwmx
1= badayak
2= com
3=
4=


********* 2

반환된 문자열= badayak
아이템   개수= 3
0= jwmx
1= badayak
2= com
3=
4=
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

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