Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97564
  • 博文数量: 41
  • 博客积分: 991
  • 博客等级: 准尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-11 19:59
文章分类

全部博文(41)

文章存档

2012年(18)

2011年(23)

分类: C/C++

2011-10-21 20:02:05

问题来自 __nlmsg_put中的 结构nlmsghdr 实例nlh 。
在netlink.h 文件有:
   #define () ((void*)(((char*)) + (0)))
其中 NLMSG_LENGTH(0) 为经字节对齐结构nlmsghdr 大小(sizeof(nlmsghdr))。(对应下面的len)

 问题简化成:结构A 成员 c ,i  如何 存储

typedef struct A {
    char c;
    int i;
} A;

char *buf=(char *)malloc(128);
A *a=(A *)buf;
a->c='p';
a->i=12;

char str[]="hello man";
memcpy((char *)a+len,str,sizeof(str));     // len 为结构体大小

printf((char *)a);               // 输出 p
printf( (char *)a+len );     // 输出 hello man
printf("%c",a->c);          // 输出 p
printf("%d",a->i);          // 输出 i


从以上输出得出: buf 所指的内存先存结构体A 的成员,然后再存 str。
所以当len=0时,c,i 数据将被破坏。


阅读(2499) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~