+ 2

Struct Pointer Address

Hi everyone, I have an issue with copying elements from a packed structure to an unpacked one. I can't correctly specify the addresses of bytes. Please help. Note that I am not able to know packed structure elements. I will have just a byte array to get information from. I mean I can't use something like: memcpy(&(up->x),&(p->c),4); So I'm trying to reach c's address. However I can't. https://code.sololearn.com/cx7T9BBCM20b/?ref=app

15th Sep 2020, 8:38 AM
ogoxu
ogoxu - avatar
3 Answers
+ 3
Onur You need to first cast the packed's pointer p to char*. Here's why. The size of struct packed is 1+2+4 = 7. Let's say the stored value in pointer p is x(memory address of pckd) Passing p+3 to memcpy causes it to start reading bytes from memory location x+7+7+7=x+21 (Pointer arithmetic),and this is not what we want. Casting p to char* will ensure that memcpy starts reading from x+1+1+1=x+3 (memory address of pckd.c) Thus a quick fix to your problem would be: memcpy(up,((char*)p)+3,4); Also note that you don't have to dereference x first then take its address(&(up->x)) since x is the first element of struct unpacked and thus up already points to it.
15th Sep 2020, 9:21 AM
Anthony Maina
Anthony Maina - avatar
+ 2
Anthony Maina, can't tell you how thankful I am. Have a great day!
15th Sep 2020, 9:25 AM
ogoxu
ogoxu - avatar
+ 1
Forgot to mention I can use the first address the pointer's pointing to. memcpy(&(up->y),p,1); correctly copies the char a in packed struct to char y in unpacked struct.
15th Sep 2020, 9:16 AM
ogoxu
ogoxu - avatar