PDA

Visualizza la versione completa : [C] restituire una stringa


rocco.g
30-04-2004, 18:11
ciao,
ho bisogna di resituire al chiamante un stringa all'interno di una funzione, solo che non so come fare, o meglio non credo si faccia così.
la funzione che dovrebbe restituire la stringa composta da numeri è del tipo:

char getNumero(char * nome, char * cognome) {
int indice;

if( (indice = getIndice(nome, cognome)) == -1) {
printf("%s %s non esiste\n",nome, cognome);
return 0;
}

else

return struttura[indice].stringa[MAX_NUMERO];
}

non penso si possa ritornare la stringa in questo modo vero ?

p.s. le variabile fanno parte di una struttura...

}gu|do[z]{®©
01-05-2004, 02:38
per quel che sappia le stringhe si restituiscono in un vettore allocato dal chiamante :fagiano:

rocco.g
01-05-2004, 12:34
si ma non credo lo possa ritornare come ho fatto io, perchè per quanto ne so, non si può ritornare l'intera stringa del vettore, ma al max l'indirizzo del suo primo elemento... il problema è se e come questo verrà passato alla funzione chiamante...
nessuno ha qualke idea o delucidazione ?

andrea_NET-_DSL
01-05-2004, 12:44
Originariamente inviato da rocco.g
si ma non credo lo possa ritornare come ho fatto io, perchè per quanto ne so, non si può ritornare l'intera stringa del vettore, ma al max l'indirizzo del suo primo elemento... il problema è se e come questo verrà passato alla funzione chiamante...
nessuno ha qualke idea o delucidazione ?
in C per far restituire ad una funzione un array,o meglio il puntatore al primo indirizzo(quindi anche una stringa essendo appunto un array di elementi di tipo char) devi usare una funzione di tipo puntatore :)



char *funzione(char *p){

//qua elabori...insomma fai quello che vuoi

return p; //dove p è il puntatore alla stringa passata in argomento a questa funzione ed eventualmente elaborata/modificata
}

nel main invece scrivi,per utilizzare il ritorno della funzione sopra..


int main(){
char stringa[10];

//...
char *p1; //puntatore di appoggio per il ritorno
p1 = funzione(stringa);

// poi se ad es vuoi usare un elemento della stringa ritornata puoi fare cosi'...
char primo_valore;
primo_valore = p1[0]; // mi salvo il primo elemento della stringa ritornata dalla funzione in una var char.

// oppure utilizzi tutta la stringa ritornata normalmente...
}

ciaoooooooo :D :)

rocco.g
01-05-2004, 14:35
grazie per avermi risposto e chiarito le idee.
Ho risolto un parte il problema, dato che adesso riesco a ritornare la stringa...anke se mi rimanere da eliminare un errore.
Vi spiego: ho una struttura che gestisce una rubrica, così specificata:

typedef struct{
char prenom[MAX_PRENOM];
char nom[MAX_NOM];
char tel[MAX_NUMERO];
} Personne;

poi c'è all'interno del prog, una funziona che permette di ricercare un numero appartenente alla persona, che risulta del tipo:

if((numTel = getNumero(pers.nom, pers.prenom))!=0)
printf("Le numero de telephone de %s %s est: %s\n",
pers.prenom, pers.nom, numTel);
else
printf("%s %s n'a pas de numero enregistre\n",pers.prenom, pers.nom);
break;

la funzione "incriminata" getnumero è :

char *getNumero(char * nom, char * prenom) {

int indice;

if( (indice = getIndicePersonne(nom, prenom)) == -1) {
printf("%s %s n'est pas dans le repertoire\n",prenom, nom);
return 0;
}

else
{

char *ptr;
mia = &repertoire[indice].tel[MAX_NUMERO];


return ptr;

}

}

credo ke c sia un errore in quest'ultima, dato che quando avvio il prog ed uso questa specifica funzione, al posto del numero della persona, mi viene stampato il nome della persone stessa...

sbaglio qualcosa ?

ah repertoire è inizializzato così:

static Personne repertoire[MAX_REP]; ( non credo cmq che serva )...

rocco.g
01-05-2004, 16:23
ehm ragazzi ho risolto da solo...grazie comunque :-)

derekderek
02-05-2004, 23:43
anche se hai risolto il problema, dovresti fare un bel ripasso di C, perchè:
- dichiari una funzione che ritorna il puntatore ad una stringa, e
poi gli fai all'interno di una istruzione if-else fai ritornare
kome valore un intero....

Sono sconcertato :confused:

rocco.g
03-05-2004, 00:00
non me ne ero nemmeno accorto a dire la verità :-)
in effetti mi sembra un errore piuttosto grosso ! :dhò: mi sembra strano che l'abbia fatto... come scusante posso solo dire che l'ho fatto per fretta dato che non ho fatto copia/incolla...
cmq tranquillo, uso il C da poco tempo...nemmeno un mese ..., e quindi più che ripeterlo lo sto ancora imparando... :p

Loading