qsort no ordenó la matriz de la cadena

Intenté ordenar una matriz de cadenas usando qsort. Aquí está el contenido de mi matriz:

{"a","orange","apple","mobile","car"} 

asi es como uso qsort:

 int myCompare (const void * a, const void * b ) { const char *pa = (const char*)a; const char *pb = (const char*)b; return strcmp(pa,pb); } int stringLen = sizeof(input)/sizeof(char *); qsort(input, stringLen, sizeof (char*), myCompare); 

Sin embargo, cuando imprimo la matriz, nada cambia. ¿Hay algo mal con esto?

Cambié su función myCompare a lo que Mitch Wheat había publicado anteriormente, y eso funciona correctamente. Aquí está el ejemplo:

 #include  #include  #include  int myCompare (const void * a, const void * b ) { const char *pa = *(const char**)a; const char *pb = *(const char**)b; return strcmp(pa,pb); } int main() { int i; const char *input[] = {"a","orange","apple","mobile","car"}; int stringLen = sizeof(input) / sizeof(char *); qsort(input, stringLen, sizeof(char *), myCompare); for (i=0; i 

Esto volverá:

 0: a 1: apple 2: car 3: mobile 4: orange 

qsort(input, stringLen, sizeof (char*), myCompare) llama a myCompare para comparar cadenas ordenadas.

myCompare obtiene punteros a valores comparados . En nuestro caso obtenemos punteros a cadenas ( const char** ). Así que debemos comparar *(const char**)a y *(const char**)b , que son cadenas apuntadas por b .

Comience a depurar con:

 int myCompare (const void * a, const void * b ) { const char *pa = (const char*)a; const char *pb = (const char*)b; printf("Comparing %s vs. %s for result %d\n", pa, pb, strcmp(pa,pb)); return strcmp(pa,pb); } 

Pienso que poco después de eso, descubrirás el problema. 🙂