Perche' io uso cygwin quindi quando eseguo il programma ci passo anche inputlist, outputlist.. il mio problema è per il confronto tra stringhe


codice:
#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; 
    char q;
    
    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("%f\n",(double)(end-start)/(double)CLOCKS_PER_SEC); 
    printlist((char *)argv[2],list,length); 

    return 0; 
     
}