首页 > 解决方案 > 如何在 c 中使用 bsearch 在结构中搜索数组

问题描述

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

#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);
}

标签: carraysstructbsearch

解决方案


你需要使用

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


推荐阅读