Hi,
I browsed thru the previous posts and couldnt find a solution for my problem. Hence I decided to post it.
I have a buffer array that I want to send thru a message queue. The array consists of a header structure and a payload structure memcopied to it. When I print the contents of the buffer array at the sending side it prints correctly. When I print the value at the receving side only the first structure prints correctly. The second structure has value zero for all of its elements. The code is as follows:
I have 3 file:
nwk.c - sending file
mac.c - receiving file
stub.c - message queue file
------------------------------------
Data Structure
------------------
typedef struct _PayLoad
{
UINT16 p1;
UINT32 p2;
UINT16 p3;
} PayLoad;
typedef struct
{
char type;
char category;
char r1;
char r2;
} header;
----------------------------------
nwk.c
====
int main()
{
int retVal;
PayLoad St;
St.p1 = 10;
St.p2 = 20;
St.p3 = 30;
retVal = sendData(&St);
return 0;
}
int sendData(void * data)
{
PayLoad *Pst;
connect_to_msgq();
char *buf, *tmp;
header h1;
buf = (char *)malloc(100);
tmp = buf;
h1.type = 'A';
h1.category = 'a';
memcpy(tmp, &h1, sizeof(header));
tmp = tmp + sizeof(header);
memcpy(tmp, data, sizeof(PayLoad));
Pst = (PayLoad *)tmp;
printf("Value = %d \n", Pst->p1);
printf("Value = %d \n", Pst->p2);
printf("Value = %d \n", Pst->p3);
send_to_NWK(buf);
}
-----------------------
mac.c
=====
int main()
{
connect_to_msgq();
recvData();
return 0;
}
int recvData()
{
PayLoad *Pst;
char *buf, *tmp;
buf = (char *)malloc(100);
buf = rcv_from_NWK();
tmp = buf;
//This printf works correctly
printf("tmp[0] = %c and tmp[1] = %c\n", tmp[0], tmp[1]);
tmp = tmp + sizeof(header);
Pst = (PayLoad *)tmp;
//All these printfs fail!
printf("Value of p1 = %d \n", Pst->p1);
printf("Value of p2 = %x \n", Pst->p2);
printf("Value of p2 = %x \n", Pst->p3);
}
---------------
The first printf in the mac.c prints 'A' and 'a' correctly. So the header structure has been sent correctly. But when I try to print the members of the second structure Payload, it prints 0 for all the members.
I have attached the 3 c files to the post.
I tried to avoid running to the Internet for a solution and have already spent a considerable time on this. I would really appreciate any help possible.
Thanks