PDA

View Full Version : [C]funzione void inizializza variabile dentro il blocco,se controllo fuori e' vuota..


santaclause83
04-09-2007, 12:46
ho una funzione

receive(char *msg,int fd)
che fa due read sulla pipe indicata dal file descriptor fd
--la prima legge la grandezza del messaggio dalla prima write del client per la malloc con la quale inizializza msg
--la seconda legge e salva in msg il messaggio ricevuto dalla seconda write del client

se faccio una stampa di controllo da dentro verifico che msg punta effettivamente al messaggio appena ricevuto.

se faccio invece una stampa di controllo dal main da dove chiamo la funzione,mi stampa a vuoto,la variabile non e' inizializzata.

DAL MAIN DEL RECEIVER CHIAMO LA FUNZIONE COSI':

int fd;//inizializzo fd dopo l'apertura della pipe sulla read...
char *s;

receive(s,fd);
printf("%s\n",s);//questa chiamata stampa a vuoto,se invece la faccio dalla funzione la variabile e' stata effettivamente inizializzata col messaggio...

spero di esser stato chiaro,e nel caso che possiate suggerirmi una soluzione

grazie mille

andbin
04-09-2007, 12:59
int fd;//inizializzo fd dopo l'apertura della pipe sulla read...
char *s;

receive(s,fd);No, la funzione riceve semplicemente una copia del valore del puntatore (che tra l'altro non è inizializzato). Quello che fai con msg nella funzione non tocca la variabile nel main.

Hai 2 possibilità:

(1) Fai ritornare un char*

char* receive(int fd)
{
char *msg;
....

return msg;
}

(2) Passi alla funzione un puntatore a char*.

void receive (char **pmsg, int fd)
{
char *msg;
....

*pmsg = msg;
}nel main:
char *s;

receive (&s, fd);

E chiaramente, in entrambi i casi, devi poi preoccuparti di deallocare la memoria quando non è più necessaria.