我已经看过这个并尝试实现,但是这样做总是给我一个段错误: Determining index from bsearch and lfind? - 这是供参考的链接。
基本上,我试图从 bsearch 或 lfind 返回的指针中找出数组中的索引。
void *val;
void *begin = (char *)v->elems (I need to use this separate variable)
然后,我调用任一搜索,这似乎工作正常......
val = bsearch(key, begin, v->count, v->elemsz, cmp);
根据上面的链接,我正在尝试执行以下操作:
index = *(int*)((char*)value_to_find - (char*)start_ptr)/sizeof(cv->elemsz)
但是,每次我这样做时都会出现段错误。我的逻辑是我将两个 void 指针都转换为 char* 类型,然后减去指针的 b/w 距离,因为你不能在 void 上进行指针运算。我将其除以每个元素的大小以返回索引,该索引需要转换为 int。我在这里想念什么?
编辑:将 sizeof(cv->elemsz) 更改为 elemsz 确实返回了正确的索引。但是,现在的问题是,如果使用 qsort 对向量进行排序,它会返回错误的值(预期为 20 时的索引为 10,等等)。