Hello folks.. In the following code, I m trying to copy struct element to array... Code: #include<iostream> #include<stdint.h> #include<string> using namespace std; struct test { struct header { int a; int b; }; uint8_t c; uint8_t d; uint8_t e; uint32_t f; }; struct test2 { uint8_t n; uint8_t m; uint8_t p; }; int main() { test headd; test2 data; uint8_t* d; int x, y,i; x= sizeof(test); y= sizeof(test::header); i= sizeof(data); x=x+y+i; d = new uint8_t[x+10]; cout<<"x ="<<x<<endl; /** Assign **/ headd.c = 4; headd.d = 5; data.n=8; data.m=7; data.p=9; /** copy 2 elements of struct 'headd' and struct 'data' on to memory block pointed by 'd' **/ memcpy(d,&headd.c,8); cout<<"d="<<*d<<endl; cout<<"d2="<<*(d+1)<<endl; memcpy(d+8,&data, 8); cout<<"d="<<*d<<endl; cout<<"d2="<<*(d+2)<<endl; return 0; } OUTPUT: x =19 d= d2= d= d2= I ve replaced uint8_t and uint32_t by datatype 'int' and it works well... i can display contents of 'd' but not for uint8_t and uint32_t . Please suggest me how can i check whether data successfully copied to destination? Thank You
I'm not sure what you are doing, but it might be a packing issue. By default, MS compilers line-up data in structure to an 8 byte boundary (makes it easier on the memory controller). You can override this behavior with the #pragma pack option: Code: [COLOR="Blue"]#pragma pack(push,1)[/COLOR] struct test { struct header { int a; int b; }; uint8_t c; uint8_t d; uint8_t e; uint32_t f; }; struct test2 { uint8_t n; uint8_t m; uint8_t p; }; [COLOR="Blue"]#pragma pack(pop)[/COLOR]
I want to copy struct test (except struct header) and struct test2 on to array pointed by 'd' I 'd put printf() to display *d instead of cout... its working Thanks for early reply