| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	Strumenti | 
| 		
			
			 | 
		#1 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Apr 2004 
				Città: La regione del Triplete 
				
				
					Messaggi: 5748
				 
				
				
				
				 | 
	
	
	
	
		
			
			 
				
				[C/C++] Come ritornare un vettore?
			 
			
		Ho una funzione madre che chiama una funzione figlia. Questa deve acquisire dallo standard input una stringa (come array char) che deve ritornare alla funzione madre affinchè poi la passi ad altre funzioni per svolgere alcune operazioni.  
		
	
		
		
		
		
			Ho letto che non è possibile ritornare un array, ma è possibile ritornare il puntatore al primo elemento dell'array, solo che non ho la più pallida idea di come implementare il tutto. Nella chiamante cosa dichiaro? Un puntatore a intero? Nella chiamata? Una cosa del genere? Codice: 
	char stringa[dimensione]; int *p; ....<altre istruzioni> p = stringa[0]; return p; 
				__________________ 
		
		
		
		
	
	Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: May 2001 
				
				
				
					Messaggi: 12861
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Nel caso di C++ sarebbe meglio usare la classe string fornita dal linguaggio (anche se comunque piuttosto scarna). 
		
	
		
		
		
		
		
		
			C'è un problema, quando chiami: Codice: 
	char stringa[dimensione]; Ciò significa che quando esci dalla funzione quell'area di memoria sarà invalidata, per cui non puoi fare affidamento ad un puntatore che punta a quell'area di memoria. La cosa da fare in questi casi è usare l'operatore new di C++ (o la malloc nel C) che alloca l'array nell'heap, un'area di memoria che è sempre valida durante tutta l'esecuzione del programma. L'operatore new per altro restituisce proprio un puntatore. Codice: 
	char* stringa = new char[dimensione]; Edit: se non vuoi che la stringa venga modificata, puoi restituire un const char. Ultima modifica di WarDuck : 12-04-2011 alle 11:36.  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#3 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Dec 2006 
				
				
				
					Messaggi: 3808
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		in C i vettori possono essere passati ad una funzione solo e soltanto per riferimento, inoltre i vettori in C, come nel resto dei linguaggi, non sono altro che puntatori, l'unica cosa che cambia è che nel C hai cognizione del fatto che alla fine stai operando su un puntatore, nei linguaggi di alto livello tutto ciò ti viene nascosto.
		 
		
	
		
		
		
		
		
	
	 | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#4 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jan 2002 
				Città: Germania 
				
				
					Messaggi: 26110
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		[PGI-Bis MODE ON] 
		
	
		
		
		
		
			I vettori non si ritornano: si restituiscono! [PGI-Bis MODE OFF] 
				__________________ 
		
		
		
		
	
	Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#5 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Apr 2004 
				Città: La regione del Triplete 
				
				
					Messaggi: 5748
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Penso di aver trovato una soluzione.  
		
	
		
		
		
		
			Nella funzione chiamante dichiaro un vettore che poi passo, con la sua dimensione (come secondo parametro) alla funzione di lettura che esegue la vera e propria lettura usando un altro vettore che ha la stessa dimensione del vettore. In questo modo posso eseguire l'effettivo controllo sul buffer overflow. Una volta superato, copio il contenuto dalla stringa della funzione a quella passata come parametro (che è di fatto per indirizzo invece che per copia): in tal modo ho la stringa che volevo nella funzione madre. 
				__________________ 
		
		
		
		
	
	Trattative felicemente concluse con domienico120, xbax88 ed engiel, ottimi e seri utenti.  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
		
		  
	   | 
| Strumenti | |
		
  | 
	
		
  | 
Tutti gli orari sono GMT +1. Ora sono le: 13:50.









		
		
		

 
 







