C, problema con stampa di ARGV

di il
3 risposte

C, problema con stampa di ARGV

Ciao a tutti,
Ho un esercizio da fare in cui mi si chiede di ordinare con qsort gli argomenti passati a una funzione tramite linea di comando.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int compare(const void *a, const void *b){

  char *x= * (char**) a;

  char *y= * (char**) b;

  int cmp=strcmp(x,y);

  if(cmp>0) return -1;

  if(cmp==0) return 0;

  if(cmp<0) return 1;

}


int main(int argn, char *argv[]){

  char **vet; int i, j=1;

  vet=(char**) malloc((argn-1) * sizeof(char*));

  for(i=0; i<argn-1; i++){

    vet[i]=(char*) malloc((strlen(argv[j])+1) * sizeof(char));

    strcpy(argv[j], vet[i]);

    j++;

  }

  qsort(vet, argn-1, sizeof(char*), compare);

  for(i=0; i<argn-1; i++){

    printf("%s\n", vet[i]);

  }

  return 0;

}
Allora il codice penso che sia giusto però quando vado, da terminale a eseguirlo, mi stampa delle linee bianche, al posto delle stringhe che immetto.

Qualcuno può darmi una mano??

3 Risposte

  • Re: C, problema con stampa di ARGV

    Ti consiglio di controllare l'uso che hai fatto della strcpy
  • Re: C, problema con stampa di ARGV

    Ahahahhaha sono uno scemo...ho invertito destinazione e sorgente della strcpy...grazie comunque!!
  • Re: C, problema con stampa di ARGV

    Direi che il codice andrebbe modificato così
    
    int compare(const void *a, const void *b)
    {
      char *x= * (char**) a;
      char *y= * (char**) b;
    
      return (strcmp(y, x));
    }
    
    
    int main(int argn, char *argv[])
    {
      char **vet; 
      int i, max=argn-1;
    
      vet=(char**) malloc((argn-1) * sizeof(char*));
    
      for(i=0; i<max; i++)
    	  vet[i] = strdup(argv[i+1]);
    
      qsort(vet, max, sizeof(char*), compare);
    
      for(i=0; i<max; i++)
        printf("%s\n", vet[i]);
    
      return 0;
    }
    
Devi accedere o registrarti per scrivere nel forum
3 risposte