如何在 c 中使用 bsearch 搜索结构中的数组

How to search an array within a structure using bsearch in c

请帮助我不明白为什么我不能在一个结构中的数组中搜索另一个结构中的另一个数组中的元素。 感谢您的帮助,伙计们将不胜感激。

#include<stdio.h>
#include<stdlib.h>
#define MAX 10

typedef struct{
    int elements[MAX];
    int count;
}SET;

int cmpfunc(const void * a, const void * b) {
   return (*(int*)a > *(int*)b) - (*(int*)a < *(int*)b);
}

void print(SET *s1, SET *s2){
    int *p;
    p = bsearch(&s2->elements[1],&s1->elements,s1->count,sizeof(s1->elements),cmpfunc);
    printf("%p",p);

    return;
}

int main () {
    SET s1 = {{5,20,29,32,63},5};
    SET s2 = {{1,29,3,5},4};

    print(&s1,&s2);

   return(0);
}

你需要使用

sizeof(*s1->elements)

相同
sizeof( int )

而不是

sizeof(s1->elements)

bsearch的调用中。

也代替了

&s1->elements

使用

s1->elements

调用看起来像

bsearch( &s2->elements[1], s1->elements, s1->count, sizeof(*s1->elements), cmpfunc );

注意转换说明符%x不能与指针一起使用。使用 %p 或取消引用找到的指针并使用 %x,前提是找到目标值。