|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Mar 2008
Messaggi: 7
|
[C] Come copiare le Struct
Ciao a tutti,
sono alle prese con il seguente programma: copiare alcuni dati in un array contenenti la struttura Pack e poi trasmettere l'array via TCP su sistema Linux. Prima di inviare la struttura ho visto che alcuni dati sono sbagliati, non li copia bene e di conseguenza in ricezione non ottengo la struttura desiderata. Ora vi mostro come copio i dati (mostro solo il codice essenziale) /* Le strutture */ struct Time { int counter; double value[100]; } packTime; struct Freq { int frequency; double record[50]; } packFreq; typedef struct Pack { int size; char data[104]; } ; /* array Pack */ Pack arrayPack[2]; In pratica devo riempire l'array "arrayPack" una volta con una struttura packFreq nel campo data, e come array di char e una volta con un struttura packTime, sempre con array di char. Ho fatto in questo modo: arrayPack[0].size = 50; /* valore fittizio */ memcpy(&arrayPack[0].data, (char *) &packFreq, sizeof(packFreq) ); arrayPack[1].size = 50; /* valore fittizio */ memcpy(&arrayPack[1].data, (char *) &packTime, sizeof(packTime) ); Bene se provo a stampare i valori dell'array, non ottengo valori giusti. Per la stampa faccio così: Pack tmpPack; memcpy(&tmpPack, &arrayPack[0], sizeof(arrayPack[0]) ); Freq tmpFreq; memcpy(&tmpFreq, (Freq*) &tmpPack.data, sizeof(tmpFreq) ); Time tmpTime; memcpy(&tmpTime, (Time*) &tmpPack.data, sizeof(tmpTime) ); Le Strutture che ho chiamato tmpFreq e tmpTime non contengono valori corretti. Cosa posso fare? Potete dirmi se ho usato un buon metodo con l'array e le memcpy? Spero di ricevere aiuto, è molto importante, Grazie a tutti! |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jan 2008
Città: Roma
Messaggi: 126
|
Diciamo che questo, ad occhio, aiuta
![]() Codice:
Pack tmpPack; memcpy(&tmpPack, &arrayPack[0], sizeof(arrayPack[0]) ); Freq tmpFreq; memcpy(&tmpFreq, (Freq*) &tmpPack.data, sizeof(tmpPack) ); memcpy(&tmpPack, &arrayPack[1], sizeof(arrayPack[0]) ); Time tmpTime; memcpy(&tmpTime, (Time*) &tmpPack.data, sizeof(tmpPack) ); cmq, per la copia di struct la memcpy va bene, ma Codice:
sizeof char = 1 sizeof int = 4 sizeof double = 8 la struttura Freq contiene 50x8+4 byte (404 byte) la struttura Pack contiene 104x1+4 byte (108 byte) quindi ricontrolla le size/definizioni delle variabili utilizzate perche' puoi rischiare di perdere parte dei contenuti... ciao
__________________
La forza dei forti sta nel traversare le traversie con occhio sereno! (PK) ... ![]() I computer sono esattamente come gli esseri umani: fanno qualsiasi cosa tranne che pensare. (John Van Neumann) Siamo brevi, il mondo è sovraffollato di parole. (Stanisław Jerzy Lec) |
![]() |
![]() |
![]() |
#3 |
Junior Member
Iscritto dal: Mar 2008
Messaggi: 7
|
Grazie per i consigli, ora ci provo.
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
Quote:
Codice:
&arrayPack[0].data[0] arrayPack[0].data |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:50.