struct 结构体可以这么用

来源:互联网 发布:开票软件最新版本 编辑:程序博客网 时间:2024/06/04 17:51
#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.


原创粉丝点击