У вас на самом деле больше проблем, чем вы получаете предупреждение:
Вы всегда сортируете MAX_PRODUCTS
элементов массива products
, независимо от того, сколько элементов действительно допустимо (вы сортировать неинициализированные и неопределенные строки).
Вы говорите, что размер элемента массива products
равен sizeof(char*)
, но products
является массивом массивов , поэтому каждый элемент products
имеет размер sizeof producst[0]
большой.
Теперь для самого предупреждения: объявление strcmp
int strcmp( const char *lhs, const char *rhs );
, в то время как функция сравнения, переданная в qsort
, равна
int (*comp)(const void *, const void *)
Типы аргументов различны. Казалось бы, возможным решением является приведение указателя strcmp
к правильному типу:
typedef int (*sortfun_type)(const void *, const void *);
// After the loop the variable index should be the number of strings read
qsort(products, index, sizeof products[0], (sortfun_type) &strcmp);
Как отмечено в комментарии, это технически не правильно (но все равно должно работать). Правильное решение заключается в написании функции-оболочки с правильными типами аргументов, которая затем вызывает strcmp
(как показано другими ).