PDA

View Full Version : Vettore di variabili strutturate in C


mic85rm
28-06-2011, 17:00
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 ;)

mic85rm
28-06-2011, 17:23
aggiornato

clockover
28-06-2011, 17:48
E ti funziona?

mic85rm
28-06-2011, 17:52
purtroppo non ho un compilatore c...

AngeL)
29-06-2011, 00:56
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);

mic85rm
30-06-2011, 13:09
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.. */
}