| Precedente :: Successivo | 
	
	
		| Autore | Messaggio | 
	
		| saetta Eroe in grazia degli dei
 
  
 
 Registrato: 25/02/08 11:52
 Messaggi: 129
 
 
 | 
			
				|  Inviato: 02 Mar 2011 18:34    Oggetto: [C] memcpy,  memmove, si o no? |   |  
				| 
 |  
				| Salve, sto realizzando un programmino in c e, dovendo scrivere una funzione che effettui la copia esatta di una struct, ho cercato di capire se posso usare memmove o memcpy. 
 La struct che devo copiare contiene un puntatore ad un array di (altre) struct, ognuna delle quali contiene un puntatore ad una lista di (altre ancora) struct.
 
 ovvero:
 
 Struct S_t
 {
 arrayElement *array; /*ptr alla testa della lista*/
 int size;
 }
 
 Struct arrayElement
 {
 char *stringa;
 listElement *testaLista
 }
 
 Struct listElement
 {
 int k;
 listElement *next;
 }
 
 Se volessi copiare la struct A, di tipo S_t, un una struct B (stesso tipo), cosa è possibile copiare "al volo" con memcpy o memmove, e cosa no?
 
 se ad esempio faccio memmove(B, A, sizeof(struct S_t) ),
 l'array B->array contiene in ogni elemento già tutte le stringhe (copiate) e i riferimenti alle liste (quindi tutta la struct A copiata esattamente)???
 
 Non credo che la funzione arrivi a tanto e vorrei capire fin dove posso usare queste 2 funzioni e da dove invece devo copiare "manualmente".
 
 Illuminatemi  Dei dell' Olimpo!!!
 
  |  | 
	
		| Top |  | 
	
		|  | 
	
		| SverX Supervisor Macchinisti
 
  
  
 Registrato: 25/03/02 12:16
 Messaggi: 11860
 Residenza: Tokelau
 
 | 
			
				|  Inviato: 03 Mar 2011 13:16    Oggetto: |   |  
				| 
 |  
				| quando copi un char pointer copi solo il puntatore e non la stringa ovviamente... come quando copi uno struct pointer copi solo il puntatore e non la struct. 
 in ogni caso una struct può essere copiata direttamente, se mi ricordo bene.
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 03 Mar 2011 15:03    Oggetto: |   |  
				| 
 |  
				|  	  | SverX ha scritto: |  	  | quando copi un char pointer copi solo il puntatore e non la stringa ovviamente... come quando copi uno struct pointer copi solo il puntatore e non la struct. 
 in ogni caso una struct può essere copiata direttamente, se mi ricordo bene.
 | 
 Sì, hai ragione in tutto.
 In C la copia di una  struct avviene membro a membro quindi dopo un b=a; abbiamo che la struct b è identica ad a.
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| saetta Eroe in grazia degli dei
 
  
 
 Registrato: 25/02/08 11:52
 Messaggi: 129
 
 
 | 
			
				|  Inviato: 03 Mar 2011 17:52    Oggetto: |   |  
				| 
 |  
				|  	  | Citazione: |  	  | In C la copia di una struct avviene membro a membro quindi dopo un b=a; abbiamo che la struct b è identica ad a.
 | 
 
 se b e a sono struct e non puntatori a struct, giusto?
 
 Inoltre, se i membri di a fossero puntatori, in b ho che gli stessi campi puntano a ciò che è puntato in a ma non ho una copia , solo un indirizzamento.
 Quindi se poi modifico o cancello a e i suoi campi, b si trova con riferimenti inconsistenti...o no???
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| SverX Supervisor Macchinisti
 
  
  
 Registrato: 25/03/02 12:16
 Messaggi: 11860
 Residenza: Tokelau
 
 | 
			
				|  Inviato: 04 Mar 2011 12:14    Oggetto: |   |  
				| 
 |  
				| sì, occhio, quando copi i puntatori stai facendo una copia di un riferimento. Come copiarsi una via e un numero civico dalle pagine gialle: hai una copia dell'indirizzo, non hai fatto un altro palazzo  |  | 
	
		| Top |  | 
	
		|  | 
	
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 04 Mar 2011 16:31    Oggetto: |   |  
				| 
 |  
				|  	  | SverX ha scritto: |  	  | Come copiarsi una via e un numero civico dalle pagine gialle: hai una copia dell'indirizzo, non hai fatto un altro palazzo | 
 SverX, da dove l'hai tirata fuori questa similitudine?
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| saetta Eroe in grazia degli dei
 
  
 
 Registrato: 25/02/08 11:52
 Messaggi: 129
 
 
 | 
			
				|  Inviato: 06 Mar 2011 13:39    Oggetto: |   |  
				| 
 |  
				| Bella similitudine invece!!! Grazie!
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| freemind Supervisor sezione Programmazione
 
  
  
 Registrato: 04/04/07 21:28
 Messaggi: 4643
 Residenza: Internet
 
 | 
			
				|  Inviato: 07 Mar 2011 11:35    Oggetto: |   |  
				| 
 |  
				| Assolutamente! Solo che non so come abbia fatto a partorirla!
 |  | 
	
		| Top |  | 
	
		|  | 
	
		| SverX Supervisor Macchinisti
 
  
  
 Registrato: 25/03/02 12:16
 Messaggi: 11860
 Residenza: Tokelau
 
 | 
			
				|  Inviato: 07 Mar 2011 13:09    Oggetto: |   |  
				| 
 |  
				| ahahahahaha... e che ne so, ne dico di minchiate... in quantità  |  | 
	
		| Top |  | 
	
		|  | 
	
		|  |