Vettore di variabili strutturate in C

mictrt
Scrivere una funzione C che inizializza l'elemento i-esimo di un vettore di variabili strutturate di tipo

struct item {
int val;
char stringa[100];
};


con una stringa e un valore intero.

la mia soluzione è questa :


struct item inizializza(int valore,char string[100])
{
struct item *inzia;
inizia=(struct item *)malloc(sizeof(struct item));
if(inizia==null){
return 0;
}
inizia->val=valore;
inizia->stringa=string;
return inizia;
free(inizia);
}

è corretta?o meglio ho interpretato bene quello che l'esercizio mi chiede?

Risposte
apatriarca
No, non è corretta. Ti chiede di inizializzare un valore di un array, non c'è quindi bisogno di allocare memoria perché la struttura è già stata allocata quando è stato allocato l'array. Il metodo corretto dovrebbe essere:

typedef struct item item; /* così non devo scrivere tutte le volte struct */
struct item {
    int val;
    char stringa[100];
};

/* ... */

void inizializza(item arr[], int i, int valore, char string[100])
{
    /* manca la verifica degli argomenti... */
    arr[i].val = valore;
    strcpy(arr[i].stringa, string); /* non puoi fare l'assegnazione in quel modo per le stringhe e in generale gli array.. */
}

gundamrx91-votailprof
Occhio a quel

typedef struct idem idem; /* così non devo scrivere tutte le volte struct */

che immagino volessi scrivere come

typedef struct item item; /* così non devo scrivere tutte le volte struct */

;-)

apatriarca
Corretto..

mictrt
Grazie ragazzi gentilissimi.. che intendi con la verifica degli argomenti?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.