char 类型指针 转化成 结构体A 指针

2585阅读 0评论2011-10-21 kgatheko
分类:C/C++

问题来自 __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 数据将被破坏。


上一篇:记一次关于malloc free 错误 和 数组作为函数参数
下一篇:atoi 实现