#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct
{
uint32_t msg_len;
uint32_t msg_type;
char msg_body[0];
}MSG;
#define BODY_OFFSET (unsigned long)(&(((MSG *)0)->msg_body))
int main(int argc,char *argv[])
{
MSG a,*p;
printf("sizeof uint32_t is %d\n",sizeof(uint32_t));
printf("sizeof MSG is %d\n",sizeof(MSG));
printf("sizeof msg_len is %d\n",sizeof(a.msg_len));
printf("sizeof msg_body is %d\n",sizeof(a.msg_body));
printf("BODY_OFFSET is %lu\n",BODY_OFFSET);
p = malloc(sizeof(MSG)+64);
if(p){
strcpy((char *)p + sizeof(MSG),"My name is iphonec.");
printf("msg_body is:%s\n",p->msg_body);
free(p);
}
return 0;
}
ubuntu虚拟机
输出:
sizeof uint32_t is 4
sizeof MSG is 8
sizeof msg_len is 4
sizeof msg_body is 0
BODY_OFFSET is 8
msg_body is:My name is iphonec.