问题来自 __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) |