|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
problemino funzione in C
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 :-)
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jun 2004
Città: Cesena
Messaggi: 56
|
Primo, ti spieghi malissimo.
Secondo, i vettori sono passati per riferimento, indi li puoi modificare.
__________________
Roberto Casadei http://www.robyonrails.eu "Tant'è amara che poco è più morte, ma per trattar del ben ch'i' vi trovai, dirò de l'altre cose ch'i' v'ho scorte." |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
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--
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2004
Città: Monselice (PD)
Messaggi: 4641
|
Quote:
__________________
2500KCorsair H70Asrock EXTREME4 GEN38GB Corsair DDR3 1600MHz CL8Gainward GTX570 GLHSSD Samsung 830 64GBCorsair CX600Centaurion2G500206BW \_\_\_\_\_DrSpeed_/_/_/_/_/
|
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 380
|
Se devi solo manipolare una stringa:
Codice:
int
doSomethingWith (char * str) {
/* fai qualcosa su str */
return SUCCESS;
}
Codice:
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;
}
__________________
Xbox360+BenQT2200HDA Ultima modifica di sheijtan : 19-02-2007 alle 10:21. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
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]".
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 380
|
Quote:
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.
__________________
Xbox360+BenQT2200HDA Ultima modifica di sheijtan : 19-02-2007 alle 10:29. |
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
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.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
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)
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0 |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2003
Messaggi: 380
|
Quote:
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);
__________________
Xbox360+BenQT2200HDA |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:37.



















