私はしばらくの間、この bsearch 宿題の問題を解決しようとしてきました。コードを使用して、最初に次のように 1 つのエントリを検索してみます。
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 は単一の値を適切に呼び出して動作しているように見えますが、次のようにループ内で SearchList 関数を繰り返し呼び出そうとすると、次のようになります。
for (int i = 0; i < attendeeCount; i++) {
*missedFirstMeeting = SearchList((char *)registrants[i], (char **)attendees, attendeeCount);
}
セグメンテーション違反エラーが発生します。私には同じことをしているように見えますが、SearchList() を繰り返し呼び出すだけですが、セグメンテーション違反エラーが発生するため、明らかに何かが間違っています。何か案は?ありがとう。