如何在 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
,前提是找到目标值。
请帮助我不明白为什么我不能在一个结构中的数组中搜索另一个结构中的另一个数组中的元素。 感谢您的帮助,伙计们将不胜感激。
#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
,前提是找到目标值。