Non è così che funziona la qsort.Se tu hai un array di schede, la qsort internamente farà una cosa del genere:
Per cui le funzioni che hai fatto sono sbagliate, semmai:codice:// in mezzo al codice scheda s1,s2; if(compare(s1,s2)>0) swap(&s1,&s2);
E questa è la funzione che passerai come argomento alla qsort, usando un array di schede e non un array di puntatori a schede (non sarebbe necessario).codice:int compara_nomi (const void *p1, const void *p2) { scheda s1 = * ((scheda*)p1); scheda s2= * ((scheda*)p2); return strcmp(s1.nome,s2.nome); }
Il cast non è "magico", se quel const void* p1 è un puntatore a un' area di memoria che contiene un dato di tipo scheda, convertendolo in char** non ottieni il puntatore al campo che contiene il nome.
Questa è una possibile soluzione.Quindi mi suggerisci di invocare la qsort corretta con uno switch?
A seconda della scelta (suppongo ci sia un menù) dell' utente, all' interno dello switch cambi il valore del puntatore a funzione che passerai alla qsort.

Rispondi quotando