Vettore di variabili strutturate in C
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?
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
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.. */ }
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 */
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 */

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