Предположим, вы хотите отсортировать массив с N
записями типа T
:
T *array = malloc(N * sizeof(*array));
Тогда ваш вызов qsort
выглядит следующим образом:
qsort(array, N, sizeof(*array), t_cmp);
Ваша функция сравнения:
int t_cmp(const void *a, const void *b)
{
const T *aa = a;
const T *bb = b;
// compare *aa and *bb
}
Полученные вами указатели являются указателями на элементы массива. Они имеют тот же тип, что и дескриптор массива, array
. (Если у вас есть массив фиксированного размера, как определено с помощью T a[N]
, эти указатели имеют тот же тип, что и массив после того, как он распался на указатель. В обоих случаях этот тип равен T *
.)
В вашем случае тип T
равен char *
. Итак:
l->list = malloc(l->numberEntries * sizeof(*l->list));
Затем сортируйте:
qsort(l->list, l->numberOfEntries, sizeof(*l->list), cmpstr);
с помощью этой функции сравнения.
int cmpstr(void const *a, void const *b)
{
char *const *aa = a;
char *const *bb = b;
return strcmp(*aa, *bb);
}
(Вместо sizeof(*l->list)
вы можете использовать sizeof(char *)
, это будет sizeof(T)
, размер одного элемента массива, на языке выше).