Я пытался решить эту проблему домашней работы bsearch некоторое время. Я стараюсь, используя мой код первого поиска для одной записи, как так:Помощь с ошибкой сегментации в функции
int Compare(const void *a, const void *b);
void SortStudents(char *studentList[], size_t studentCount)
{
qsort(studentList, studentCount, sizeof(studentList[0]), Compare);
}
int Compare(const void *a, const void *b)
{
return (strcmp(*(char **)a, *(char **)b));
}
char *SearchList(char *key, char *list[], size_t num)
{
char **value = bsearch(&key, list, num, sizeof(list[0]), Compare);
return (value == 0 ? 0 : *value);
}
/*Determines which registrants did not attend the first meeting by searching for registrants
that are not in attendees set. */
void DisplayClassStatus(
const char *registrants[], size_t registrantCount,
const char *attendees[], size_t attendeeCount)
{
char *missedFirstMeeting = SearchList((char *)registrants[0], (char **)attendees, attendeeCount);
}
Мой missedFirstMeeting, кажется, работает в выкрикивая одно значение правильно, но когда я пытаюсь неоднократно называть свою функцию спискупоиска в цикле, как так:
for (int i = 0; i < attendeeCount; i++) {
*missedFirstMeeting = SearchList((char *)registrants[i], (char **)attendees, attendeeCount);
}
Я получаю ошибку ошибки сегментации. Мне кажется, что я делаю то же самое, но просто неоднократно вызываю SearchList(), но, очевидно, что-то не так, что я не вижу, так как получаю эту ошибку ошибки сегментации. Есть идеи? Благодарю.
Я думал, что должен использовать *, чтобы сказать, что я хочу, чтобы значение missedFirstMeeting было установлено на возвращаемое значение SearchList, но, я думаю, это неверно. Но делая это с помощью цикла for, пропущенныйFirstMeeting получает только указатель на один элемент за раз? И если бы я сделал что-то вроде missedFirstmMeeting [i], то это был бы массив значений? – Crystal
Я отредактировал свой ответ, чтобы показать, как вы сделали бы, чтобы сохранить все результаты в массиве. – Juan