Array di struct e strcpy

di il
3 risposte

Array di struct e strcpy

Salve,oggi sono inciampato su questo problema,devo fare un ordinamento di un vettore di record
quando faccio lo scambio però usando la strcpy mi crasha il programma.
ne ho provate tante ma proprio non capisco.
vi allego il codice di definizione di struct e array, e la funzione ordina,sono + che sicuro che l'array e' caricato bene e che la funzione ordina lo scandisca, e propio la strcpy che mi da errore.
help plz!

questa e' la struct
typedef struct dizionario_cod_descrizione{
   char *descrizione;
   int dzcodice;
    }dizionario_cod_descrizione;
dizionario_cod_descrizione Dizionario[maxdz];

questa e' la funzione ordina
void ordina(){
    char appoggio[20];
int scan_esterno=1,scan_interno=1;//indice per ordinamento
for(scan_esterno=1;scan_esterno<fineDz;scan_esterno++){
    for(scan_interno=2;scan_interno<fineDz;scan_interno++){
      if(strcmp(Dizionario[scan_esterno].descrizione, Dizionario[scan_interno].descrizione) > 0){
                 strcpy(appoggio,Dizionario[scan_esterno].descrizione);
          strcpy(Dizionario[scan_esterno].descrizione,Dizionario[scan_interno].descrizione);
            strcpy(Dizionario[scan_interno].descrizione,appoggio);
           }
 }}}

3 Risposte

  • Re: Array di struct e strcpy

    Ho notato che la copia della stringa nella variabile di appoggio funziona,ma non funziona il contrario,cioe copiare la variabile d'appoccio in array[].descrizione
  • Re: Array di struct e strcpy

    Incomincio a credere che il problema sia la dichiarazione di char * descrizione all'interno della struct....ma non posso cambiarlo perche' l'intero programma lo utilizza.
  • Re: Array di struct e strcpy

    ho notato che la copia della stringa nella variabile di appoggio funziona,ma non funziona il contrario,cioe copiare la variabile d'appoccio in array[].descrizione
    incomincio a credere che il problema sia la dichiarazione di char * descrizione all'interno della struct....ma non posso cambiarlo perche' l'intero programma lo utilizza.
    Hai eseguito correttamente l'allocazione dinamica? Su che indirizzo stai scrivendo?
    ... e poi perchè non utilizzi la funzione qsort del c
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define maxdz 20
    int fineDz=0;
    
    typedef struct dizionario_cod_descrizione{
       char *descrizione;
       int dzcodice;
        }dizionario_cod_descrizione;
    dizionario_cod_descrizione Dizionario[maxdz];
    
    int comparator (const void *a, const void *b)
    {
      dizionario_cod_descrizione *ia=(dizionario_cod_descrizione *)a;
      dizionario_cod_descrizione *ib=(dizionario_cod_descrizione *)b;
      
      return (int)(strcmp (ia->descrizione,ib->descrizione));
    }
    
    void dsp ()
    {
      int i;
      
      for (i=0;i<fineDz;i++)
          printf ("%02d %20s %5d\n",i,Dizionario[i].descrizione,Dizionario[i].dzcodice);
    }
    
    int main (void)
    {
      // Create
      for (fineDz=0;fineDz<10;fineDz++)
      {
        Dizionario[fineDz].descrizione=malloc(20);
        sprintf (Dizionario[fineDz].descrizione,"%c%c%c",65+rand()%25,65+rand()%25,65+rand()%25);
        Dizionario[fineDz].dzcodice=fineDz;
      }
      //
      // Display
      dsp ();
      //
      printf ("Sorting...\n");
      qsort (Dizionario,fineDz,sizeof(dizionario_cod_descrizione),comparator);
      //
      // Display
      dsp ();
      //
      // Freeing memory
      for (;fineDz>=0;fineDz--)
        free (Dizionario[fineDz].descrizione);
    
      return 0;
    }
    
    ~Max~
Devi accedere o registrarti per scrivere nel forum
3 risposte