Ciao a tutti,devo un set di stringhe prese in input da un file e restituirle ordinate in un file di output, la prima parte del codice(funzioni exchange,partition e sortlist servono per l'ordinamento le altre funzioni per il caricamento delle stringhe e quelle funzionano) il mio problema e nella funzione partition in quanto questo codice funziona con gli interi ma non con i char perche' nei confronti con <> per i char è diverso dovrei usare strcmp ma non riesco a farlo funzionare, qualcuno può aiutarmi a sistemare i confronti con la strcmp? grazie mille


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>



void readsize(char *inputlist, int *length, int *size) {
FILE *in=fopen("inputlist.txt","r");
int i=0,j=0;
char tmp;

while(fscanf(in,"%c",&tmp)!=EOF && tmp!='\n') j++;
rewind(in);
while(fscanf(in,"%*s\n")!=EOF) i++;
(*length)=i; (*size)=j;
fclose(in);
}

char *readline(FILE *in,int size) {
char *line=(char *)malloc(size*sizeof(char)), tmp;
int i=0;

while(i<size && fscanf(in,"%c",&line[i])!=EOF) i++;
fscanf(in,"%c",&tmp);
if(tmp!='\n')
{
printf("Error: malformed file\n");
return NULL;
}

return line;
}

char **loadlist(char *inputlist, int *length, int *size) {
int i;
char **list;
FILE *in=fopen("inputlist.txt","r");

readsize(inputlist,length,size);

list=(char **)malloc((*length)*sizeof(char *));

for(i=0; i<(*length); i++)
list[i]=readline(in,(*size));

fclose(in);

return list;
}
void exchange(char **list, int i, int j) {
char *tmp=list[i];
list[i]=list[j];
list[j]=tmp;
}

char partition(char **list, int p, int r) {
int i=p, j=r, x, v;
char *pivot;

x=rand()%(r-p+1)+p;
exchange(list,x,p);
pivot=list[p];

while(p<r)
{

while(j>p && strcmp(list[j],pivot)<0)
j--;
while(i<r && strcmp(list[j], pivot)>=0) i++;
if(i<j)
exchange(list,i,j);
}
exchange(list,p,j);
return q;

}
char **sortlist (char **list, int p, int r) {

char q,
int i;

if(p<r)
{

q=partition(list,p,r);

sortlist(list,p,q-1);
sortlist(list,q+1,r);
}
return list;
}
void printlist(char *outputlist, char **list, int length)
{
int i;
FILE *out=fopen("outputlist.txt","w");

for(i=0; i<length; i++)
fprintf(out,"%s\n",list[i]);
fprintf(out,"\n");
fclose(out);
}
int main(int argc, const char *argv[]) {

char **list;
int length,size;
time_t start, end;

if(argc!=3)
{
printf("Usage: stringsort <input list> <output list>\n");
return 1;
}

list=loadlist((char *)argv[1],&length,&size);
start=clock();

list=sortlist(list,length,size);
end=clock();

printf("%g\n",(int)(end-start)/(int)CLOCKS_PER_SEC);
printlist((char *)argv[2],list,length);

return 0;

}