PDA

View Full Version : problemino funzione in C


Re_Kotc
18-02-2007, 19:17
ho un dubbio riguardo all'uso delle funzioni in C, se ne scrivo una che deve restituire un vettore di caratteri, non potendo passare l'intero vettore in un unico assegnamento come posso fare? ho provato a scrivere la funzione in modo che restituisse un puntatore a char però non funziona....!..c'è qualche base teorica che mi sfugge o che altro?...grazie mille :-)

kniv7s
18-02-2007, 22:00
Primo, ti spieghi malissimo.

Secondo, i vettori sono passati per riferimento, indi li puoi modificare.

Re_Kotc
18-02-2007, 22:30
a me sembra piuttosto chiaro...cmq proverò a farla + facile..come faccio a scrivere una funzione che restituisca un vettore di caratteri?..qualcuno può fare un esempio? (la funzione in se non ha importanza ciò che conta è il vettore di caratteri che viene restituito)...spero si capisca adesso--

Dr.Speed
19-02-2007, 03:01
a me sembra piuttosto chiaro...cmq proverò a farla + facile..come faccio a scrivere una funzione che restituisca un vettore di caratteri?..qualcuno può fare un esempio? (la funzione in se non ha importanza ciò che conta è il vettore di caratteri che viene restituito)...spero si capisca adesso--

metti la funzione dentro un ciclo for con una variabile che legge un elemento del vettore per volta:)

sheijtan
19-02-2007, 09:16
Se devi solo manipolare una stringa:

int
doSomethingWith (char * str) {
/* fai qualcosa su str */
return SUCCESS;
}


se la tua funzione deve creare e manipolare una stringa:

char *
vreateStr(size_t n) {
char* str;
/* creo un array di char di dimensioni n */
str = (char*) malloc (n);
/* fai cualcosa su str */
/* ricordati di mettere un \0 a fine stringa */
return str;
}

Re_Kotc
19-02-2007, 09:17
uhm...scusate forse sono io che non ho spiegato bene..faccio un esempio


char *funzione(){

char *parola[20];

return *parola;

}

io ho bisogno che la funzione restituisca un vettore che è stato elaborato nella funzione stessa (nell'esempio ovviamente la funzione non fa assolutamente nulla), però così come è scritto non funziona, pensavo di poter passare all'esterno il puntatore così da avere come return l'intero contenuto di "parola[20]".

sheijtan
19-02-2007, 09:27
uhm...scusate forse sono io che non ho spiegato bene..faccio un esempio


char *funzione(){

char *parola[20];

return *parola;

}

io ho bisogno che la funzione restituisca un vettore che è stato elaborato nella funzione stessa (nell'esempio ovviamente la funzione non fa assolutamente nulla), però così come è scritto non funziona, pensavo di poter passare all'esterno il puntatore così da avere come return l'intero contenuto di "parola[20]".
L'es che hai postato non funzionerebbe perché l' array allocato nella funzione verrebbe deallocato nel ritorno al chiamante ed anche perché hai dichiarato un vettore di *puntatori a char* di 20 elementi.
ti conviene:
1- allocare la stringa fuori della funzione che dovrà manipolarla
2- passare la stringa e alla funzione come puntatore
3- se non passi esplicitamente la dimensione della stringa alla funzione
usa il carattere \0 per determinare la fine della stringa.
quindi primo es. che ho postato.

andbin
19-02-2007, 09:36
char *funzione(){

char *parola[20];

return *parola;

}Innanzitutto, parola così come lo hai dichiarato, è un array di puntatori a char. Non un vettore di char. Comunque anche se l'avessi dichiarato:

char parola[20];

Non puoi restituire parola perché al termine della funzione, l'array "sparisce". Potresti dichiarare parola 'static', in quel caso ha durata fissa e potresti quindi restituirlo. Ovviamente non è il massimo .... ma può andare bene in taluni casi.

Re_Kotc
19-02-2007, 09:45
uhm...vi ringrazio delle risposte!:-) ma allora scusate se l'array viene deallocato al termine dell'esecuzione della funzione....il return a cosa serve??...cioè se io voglio che la variabile venga restituito all'esterno (anche non un vettore) non posso scrivere return variabile??...(supponendo sempre che variabile sia dichiarata dentro la funzione)

sheijtan
19-02-2007, 09:58
uhm...vi ringrazio delle risposte!:-) ma allora scusate se l'array viene deallocato al termine dell'esecuzione della funzione....il return a cosa serve??...cioè se io voglio che la variabile venga restituito all'esterno (anche non un vettore) non posso scrivere return variabile??...(supponendo sempre che variabile sia dichiarata dentro la funzione)

a questo servono le chiamate per riferimento. Il return può ritornare un *valore* dei tipi fondamentali (int, double, char ecc ecc). cmq, quando hai funzioni che compiono operazioni complesse in cui qualcosa può andar storto sarebbe bene:
1-lavorare sui puntatori (chiamate per riferimento).
2-usare il qualificatore const per i puntatori ai dati costanti (non modificati dalla funzione)
3- usare return per ritornare un codice di errore (int)
es.:
int foo(const myDataType* data, myOutputType* out);