kyr9389   5년 전

군대에서 검색하려니 시간의 제약이 좀 커서 염치불구하고 질문드립니다..

C 에서 사용하는 이진탐색 함수인 bsearch 함수와 같은 형식의 함수를 만드려고하는데 오류가 발생했습니다. 어떤부분이 문제이고, 어떻게 고쳐야 하는지 알려주시면 감사하겠습니다.


bsearch 함수와는 다르게 선형 탐색 알고리즘을 사용하고, 배열의 정렬여부는 상관 없습니다.

ideone.com 에서 발생한 오류 메시지도 함께 올리겠습니다

prog.c: In function ‘seqsearch’:
prog.c:12:20: warning: dereferencing ‘void *’ pointer
   if((*compar)(base[i], *key) == 0) return &base[i];
                    ^
prog.c:12:25: warning: dereferencing ‘void *’ pointer
   if((*compar)(base[i], *key) == 0) return &base[i];
                         ^~~~
prog.c:12:3: error: invalid use of void expression
   if((*compar)(base[i], *key) == 0) return &base[i];
   ^~
prog.c:12:3: error: invalid use of void expression
prog.c:12:49: warning: dereferencing ‘void *’ pointer
   if((*compar)(base[i], *key) == 0) return &base[i];
                                                 ^
prog.c:12:44: warning: return discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
   if((*compar)(base[i], *key) == 0) return &base[i];
                                            ^~~~~~~~
prog.c: In function ‘main’:
prog.c:29:41: warning: passing argument 5 of ‘seqsearch’ from incompatible pointer type [-Wincompatible-pointer-types]
  p = seqsearch(&key, x, 5, sizeof(int), int_cmp);
                                         ^~~~~~~
prog.c:10:7: note: expected ‘int (*)(const void *, const void *)’ but argument is of type ‘int (*)(const int *, const int *)’
 void *seqsearch(const void *key, const void *base, int nmemb, int size, int(*compar)(const void *, const void *)) {
       ^~~~~~~~~
prog.c:31:23: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘int *’ [-Wformat=]
  printf("key:%d &key:%d\n", key, &key);
                       ^

jung2381187   5년 전

compar에서 void 대신 int 포인터로 바꾸시면 됩니다

댓글을 작성하려면 로그인해야 합니다.