Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[C] memcpy, memmove, si o no?
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 10:52
Messaggi: 129

MessaggioInviato: 02 Mar 2011 17:34    Oggetto: [C] memcpy, memmove, si o no? Rispondi citando

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!!!
Crying or Very sad
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 03 Mar 2011 12:16    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 03 Mar 2011 14:03    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 10:52
Messaggi: 129

MessaggioInviato: 03 Mar 2011 16:52    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 04 Mar 2011 11:14    Oggetto: Rispondi citando

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 Wink
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 04 Mar 2011 15:31    Oggetto: Rispondi citando

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
Profilo Invia messaggio privato
saetta
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 25/02/08 10:52
Messaggi: 129

MessaggioInviato: 06 Mar 2011 12:39    Oggetto: Rispondi citando

Bella similitudine invece!!!
Grazie!
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 07 Mar 2011 10:35    Oggetto: Rispondi citando

Assolutamente!
Solo che non so come abbia fatto a partorirla!
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11559
Residenza: Tokelau

MessaggioInviato: 07 Mar 2011 12:09    Oggetto: Rispondi

ahahahahaha... e che ne so, ne dico di minchiate... in quantità Wink
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi