View Full Version : [C] spiegatemi questo WARNING
...struct msgbuf1 { /* struttura che contiene: */
long mtype; /* - tipo del messaggio; */
char mtext[100]; /* - il messaggio; */
} sndbuf, rcvbuf, *msgp;
char *piatto, *temp_pid;
...
piatto = malloc(strlen(msgp->mtext) - strlen(temp_pid ) );
~/Marco/>gcc program.c -o accademia
program.c: In function `main':
program.c:131: warning: assignment makes pointer from integer without a cast
~/Marco/>
gcc ti avverte solo che quando fai quel assegnamento non hai fatto nessun cast quindi ce lo mette lui.
Se lo metti esplicito smette di dare il warning.
piatto = (char*) malloc(strlen(msgp->mtext) - strlen(temp_pid ) );
ciao ;)
ilsensine
08-04-2004, 10:11
Il codice è corretto, forse l'errore è da un'altra parte (ridefinizione di variabili, boh...)
Intanto cerca la variabile "sospetta", controlla ad es. se con uno di questi due cast il warning scompare:
strlen((char *) (msgp->mtext))
strlen((char *) temp_pid)
Tieni anche conto che in presenza di certe macro (non so se ne usi qualcuna) le righe riportate dal gcc possono essere scorrette. Ad esempio ti sei concentrato sulla malloc, e forse l'errore è sulla linea dopo...boh...
Sono solo indicazioni, la malloc come la hai scritta non dovrebbe produrre warning.
ilsensine
08-04-2004, 10:12
Originariamente inviato da VICIUS
gcc ti avverte solo che quando fai quel assegnamento non hai fatto nessun cast quindi ce lo mette lui.
Non è obbligatorio castare da void * a <qualsiasitipo> * (malloc ritorna void *, non un intero come suggerisce il warning). Almeno, non con tutte le verisoni di gcc che ho provato.
Non è perchè il campo mtext della struttura è definito come char[100] e non come char * ?
mmm...il warning sparisce solo se:
piatto = (char *)malloc(strlen(msgp->mtext) - strlen(temp_pid ) );
ilsensine
08-04-2004, 10:31
No. Un array di char è un puntatore costante.
ilsensine
08-04-2004, 10:32
Originariamente inviato da cn73
mmm...il warning sparisce solo se:
piatto = (char *)malloc(strlen(msgp->mtext) - strlen(temp_pid ) );
Puoi vedere se il warning ti compare anche con questo codice?
void *v = NULL;
char *c;
c = v;
Col tuo codice non compare...
ilsensine
08-04-2004, 10:51
Allora la tua malloc è definita restiruire "unsigned long". Strano, che versione delle libc stai usando?
ilsensine
08-04-2004, 12:57
Ho capito... :doh:
SCOMMETTO che se compili con
gcc program.c -o accademia -Wall
ovvero dicendogli di mostrare tutti i warning, ti compare anche questo:
warning: implicit declaration of function `malloc'
...VERO? :huh:
Hai capito ora dove è il "problema"? ;)
Esatto il messaggio è proprio quello...
mmm...non so, la malloc non è definita per restituire un tipo stabilito ma è una void?...perciò assegnando il suo valore a una variabile dovrei castizzarla?
ilsensine
08-04-2004, 13:17
Includi stdlib.h, animale! :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.