Прочитайте документацию qsort
еще раз.Аргументы, передаваемые вашей функции сравнения, не являются объектами для сравнения, они указатели на эти объекты.Таким образом, x,y
- это не сами строки (то есть указатели на символы строк), а указатели на эти указатели.
Таким образом, вы хотите написать
int cmp (void *x, void *y) {
printf("x: %s | y: %s\n", *(char**) x, *(char**) y);
return 0;
}
Также см. ДжошуаОтветьте о проблеме с аргументами размера в qsort
.
Наконец, функция сравнения qsort
должна принимать указатели на const void
, а не просто void
.И хорошей практикой будет сохранять вещи const
, когда вы не собираетесь их изменять.В этом случае вы не собираетесь изменять указатель, на который указывает x
, и символы, на которые указывает *x
.Так что было бы еще лучше написать
int cmp (const void *x, const void *y) {
printf("x: %s | y: %s\n", *(const char* const *) x, *(const char* const *) y);
return 0;
}