구조체 실행 배열을 char로 결과 정렬이라는 정렬을 시도하고 있지만 배열을 인쇄해도 아무 것도 정렬되지 않습니다.qsort 구조체 배열이 작동하지 않습니다.
struct run {
char name[20], weekday[4], month[10];
(And some more...)
};
typedef struct run run;
int name_compare(const void *a, const void *b)
{
run *run1 = *(run **)a;
run *run2 = *(run **)b;
return strcmp(run1->name, run2->name);
}
int count_number_of_different_persons(run results[])
{
int i = 0;
qsort(results, sizeof(results)/sizeof(run), sizeof(run), name_compare);
for(i = 0; i <= 999; i++)
{
printf("%s\n", results[i].name);
}
// not done with this function yet, just return 0
return 0;
}
위의 출력이 정말 당신이 배열에 sizeof
를 사용하지 않고 원래
'void * a'와'void * b'는 배열 항목에 대한 포인터입니다. 배열 자체가'run'으로 typedef 된 struct에 대한 포인터로 구성되어 있다면'void * a'의 올바른 형변환은'(run **) a'입니다. 이것은 여전히 포인터에 대한 포인터이므로 구조체에 대한 포인터를 얻으려면이 포인터 포인터를 역 참조해야합니다. 그러므로'* (run **) a'. 그것은 여기처럼 보이지만 배열은 포인터의 배열이 아니라 직선 배열이므로 올바른 캐스트를 '(실행 *) a'라고합니다. (나는 지금이 문제에 부딪쳤다.이 게시물은 다른 사람에게 도움이 될 것이라고 생각했다.) –
@NickBauer, 정말 다른 사람을 도울 수 있기를 바란다.하지만 4 년 후 문맥에서 벗어나서 원래의 질문과 대답을 다시 읽고 다시 생각해 보지 못하게 해독 할 수는 없다. –