Я пытаюсь использовать bsearch, но результат поиска продолжает оставаться NULL. Мой массив имен сортируется по алфавиту. Я новичок в C и вам нужна ваша помощь, чтобы понять, где я ошибаюсь.Проблема функции Bsearch в C
Вот массив
// arrays of children's names
char *chBamba[] = { "Bambale1", "Bamb2", "Bamb3", "Bambook4", "Bambookle5" };
char *chBisli[] = { "Bislile1", "Bischick2", "Bislile3", "Bis4" };
int nBamba = sizeof(chBamba)/sizeof(*chBamba);
int nBisli = sizeof(chBisli)/sizeof(*chBisli);
// array of workers
Worker a[] = { { "Printf", 10, NULL, 0 } ,{ "Bisli", 20, chBisli, nBisli },
{ "TapooChips", 3, chBamba, nBamba },{ "Bamba", 19, chBamba, nBamba } };
Это структура
typedef struct{
char name[LEN]; // worker's name
int salary; // worker's salary
char **childArr; // array of children names
int numChildren; // number of children}Worker;
функция сравнения
int compareNames(const void* child1, const void* child2){
char* ch1 = (char*)child1;
char* ch2 = (char*)child2;
return strcmp(ch1, ch2);
}
И bsearch
char childName[10];
char* nameFound;
printf("Please enter a child name to search for :");
scanf("%s",childName);
for (i = 0; i < 4; i++)
{
nameFound =(char*) bsearch(childName,a[i].childArr, a[i].numChildren, sizeof(a[i].childArr)/ sizeof(a[i].childArr[0]), compareNames);
}
Это C не C++. То, что я изучаю прямо сейчас. Я использую VS 2015, и он работает как для C, так и для C++. Я редактирую некоторые изменения, чтобы заставить его работать правильно и компилировать. Так сравнить это
int compareNames(const void * s1, const void * s2){
const char *key = (char*)s1;
const char * const *arg = (char**)s2;
return strcmp(key, *arg);
}
и bsearch является
nameFound = (char*)bsearch(childName,a[i].childArr, a[i].numChildren, sizeof(char*), compareNames);
Нет необходимости вводить тип 'bsearch'. Он возвращает 'void *'. – RoadRunner
@RoadRunner: Правильно. Тем не менее OP, скорее всего, использует либо компилятор C++, либо MS-VS. – alk
Да я использую VS2015 и там он просит отливки –