Я пытаюсь сортировать строковый массив в алфавитном порядке, используя qsort
.О qsort в C для строкового массива
Когда я использую comp1
, который отдает аргументы char**
, он работает хорошо.
Но нет, если я использую comp2
, который вместо char*
.
Почему? Я не могу понять разницу между comp1
и comp2
.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int comp1(const void *a, const void *b) {
const char **pa = (const char **)a;
const char **pb = (const char **)b;
return strcmp(*pa, *pb);
}
int comp2(const void *a, const void *b) {
const char *pa = (const char *)a;
const char *pb = (const char *)b;
return strcmp(pa, pb);
}
void main(void) {
char *array[] = {"c","b","a"};
int size = sizeof(array)/sizeof(char *);
int i;
qsort(array,size,sizeof(char *),compX);
//compX is comp1 or comp2
for(i=0;i<size;i++){
printf("%s",array[i]);
}
}
выходов
а ← когда я использую COMP1
CBA ← когда я использую comp2
В отличие от него, это 'int main 'И явные приведения от' void *' к некоторому другому указателю-указателю не нужны и не должны выполняться в C. Также избегайте передачи типа 'sizeof' вместо выражения, которое подвержено ошибкам. – Deduplicator