Проблема в структуре массива argv.
Он имеет такую структуру
program\0arg1\0argument2\0a3\0\0
Функция qsort предполагает, что все элементы имеют одинаковый размер, но в этом случаеони не.Вы указываете размер argv[optind]
, но не все элементы имеют такой размер.
Редактировать : я ошибся, вы не передаете длину строки в qsort, а длинууказатели.Таким образом, argv содержит массив указателей.Цель состоит в сортировке указателей.
Это означает, что вы передаете массив указателей в qsort, и функция сортировки должна ожидать указатель.Как это:
int
sort(const void *a, const void * b)
{
return(strcmp( *(char**)a, *(char**)b ));
}
qsort(argv+optind, argc - optind, sizeof(argv[optind]), sort);