View Full Version : 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 *inizia;
inizia=(struct item *)malloc(sizeof(struct item));
if(inizia==null)
{
return 0;
}
inizia->val=valore;
inizia->stringa=string;
return inizia;
}
è corretta?o meglio ho interpretato bene quello che l'esercizio mi chiede?
clockover
28-06-2011, 17:13
Totalmente sbagliate un sacco di cose... la prima cosa che hai sbagliato è che non hai indentato il codice... c'è un pulsantino qui sopra oppure scrivi CODE tra parentesi quadre, codice, /CODE sempre tra quadre
poi
struct item inizializza(...)
vuol dire che devi ritornare una struct item, non un intero cioè
return 0;
e non un puntatore alla struct
return inizia;
quindi ti consiglio di cambiare la tua funzione in
struct item * inizializza(...)
se fai una qualunque operazione dopo il return, quella qualunque operazione non verrà mai eseguita
return inizia;
free(inizia);
intanto aggiusta tutto questo poi parliamo del resto ;)
clockover
28-06-2011, 17:48
E ti funziona?
purtroppo non ho un compilatore c...
purtroppo non ho un compilatore c...
:eek:
http://www.google.com/search?q=mingw se sei su win, altrimenti su linux hai già il gcc.
per compilare dai gcc nomefile al terminale.
Supdario
29-06-2011, 18:08
if(inizia==null)
{
return 0;
}
NULL va scritto in maiuscolo, inoltre ti consiglierei di returnare NULL e non 0 (è la stessa cosa, ma si tratta di scrivere il codice in modo più rigoroso), quindi:
if(inizia == NULL)
{
return NULL;
}
Poi, questo non lo puoi fare:
inizia->stringa=string;
Per copiare una stringa devi servirti dell'apposita funzione "strcpy", o in questo caso dato che la tua stringa è allocata nello stack ed ha una dimensione massima di 100 caratteri ti conviene usare strncpy:
strncpy(inizia->stringa, string, 100);
il compilatore c non ce l'ho qui a lavoro :D
grazie a tutti per le risposte comunque ora posto la soluzione corretta dal problema posto sopra...
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.. */
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.