Dichiarazione errata di funzione

di il
2 risposte

Dichiarazione errata di funzione

Ciao
Ho questo problema. Nel main ho dichiarato una variabile
char stringa[100];

vorrei costruire questa stringa con una funzione e sicuramente sbaglio, perchè ho fatto così:

char stringaRicevuta(int sockDesc){
char unsigned c;
char tmp[100] = " ";
int i=0;
int n;
  do {
        n = recv(sockDesc, &c, 1, 0); // non preoccuparsi di questa funzione che esiste
        if (c!='\n'){
           tmp[i]=c;
           i++;}
         } while( c!='\n' );
          tmp[i]='\0';     
return(tmp);
} 
In questo modo nel main faccio una chiamata
stringa = stringaRicevuta(nSocketDesc);

Il problema è che in compilazione ho l'errore
incompatible types assignement in function stringaRicevuta e come numero di riga mi indica quella della chiamata. E' evidente che ho dichiarato male la funzione, ma non so come venirne fuori.

Come al solito, mi sto incasinando.
Spero che qualcuno mi possa aiutare.

Saluti
Lucky

2 Risposte

  • Re: Dichiarazione errata di funzione

    Nella funzione stringaRicevuta che hai creato, hai specificato come valore di ritorno char, ma tu nella return restituisci un array di char (cioè tmp), in particolare restituisci il puntatore al primo elemento di tale array.

    Quindi dovresti cambiare la dichiarazione della tua funzione in:

    char* stringaRicevuta(int sockDesc){

    inoltre così facendo avresti un warning, perchè restituisci un indirizzo di una variabile locale, quindi ti conviene creare l'array tmp usando la malloc

    char* tmp = (char*)malloc(sizeof(char)*100); //così allochi uno spazio in ram necessario per contenere 100 caratteri e in tmp hai l'indirizzo iniziale di tale spazio

    l'uso che fai dopo di tmp (cioè con le parentesi quadre) va benissimo anche con questa modalità.

    poi nel main è inutile la dichiarazione

    char stringa[100]

    così non fai altro che allocare un altro array da 100 entry che poi non utilizzerai, in quanto la tua funzione restituisce il puntatore all'array che hai appena creato quindi devi dichiarare "stringa" in questo modo:

    char* stringa;

    infine l'altra istruzione, quella in cui assegni l'indirizzo dell'array creato dalla funzione a "stringa", rimane uguale:

    stringa = stringaRicevuta(nSocketDesc);

    spero di esserti stato di aiuto e non aver creato confusione
  • Re: Dichiarazione errata di funzione

    Molto chiaro e ti ringrazio.
    Ciao
Devi accedere o registrarti per scrivere nel forum
2 risposte