c - 如何在 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);
}
解决方案
你需要使用
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