Функция bsearch()
предназначена для поиска одного элемента, соответствующего некоторому условию. Согласно справочной странице:
RETURN VALUE
The bsearch() function returns a pointer to a matching member of the
array, or NULL if no match is found. If there are multiple elements
that match the key, the element returned is unspecified.
Ключ здесь в том, что если есть несколько элементов, которые соответствуют ключу, возвращаемый элемент не указан. Таким образом, вы не знаете, является ли элемент, который вы получаете, первым, последним или где-то посередине диапазона.
Если вы можете изменить свои требования так, чтобы вы искали элементы в массиве между A и B, и вы могли гарантировать, что в массиве ровно один A и ровно один B, то вы можете сначала найти затем найдите B.
start = bsearch(A, array, N, sizeof(*array), compare);
end = bsearch(B, array, N, sizeof(*array), compare);
Вам, вероятно, придется написать собственную функцию, чтобы делать именно то, что вы хотите.