• 全部
  • 问答

嵌套结构体问题

mypromise 2004-06-07 12:53:21
定义了以下嵌套结构体,并对其中一个结构体中的一个变量赋值,然后用指针访问的时候显示为0,怎么回事?
我发现偏移量有问题...应该怎么加?

typedef struct _clnp_head
{
char indenfy;
char len;
char ver;
char TTL;
char flag;
short seglen;
short checksum;
}clnp_head;

typedef struct _clnp_addr
{
char srclen;
char srcaddr[10];
char destlen;
char destaddr[20];
}clnp_addr;

typedef struct _clnp_segment
{
short dataid;
short offset;
short totallen;
}clnp_segment;

typedef struct _clnp_s
{
char indenfy;
char len;
char ver;
char TTL;
char flag;
short seglen;
short checksum;
clnp_addr addr;
clnp_segment segment;
}clnp_s;

void main()
{
clnp_s clnp;

clnp_segment *pstSegment = NULL;

memset(&clnp, 0, sizeof(clnp_s));

clnp.addr.srclen = 10;
clnp.segment.dataid = 1;

pstClnp = &clnp;
pstSegment = (clnp_segment*)(void*)((&clnp) + sizeof(clnp_head) + sizeof(clnp_addr));

cout << pstSegment->dataid << endl;
}

...全文
113 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mypromise 2004-06-07
多谢,顺便更正一下,增加的长度是 sizeof(clnp_s) * (sizeof(clnp_head) + sizeof(clnp_addr)),字节对齐已考虑
回复
xjp6688 2004-06-07
up
回复
dot99 2004-06-07
还需要注意的是对齐问题!
回复
dot99 2004-06-07
pstSegment = (clnp_segment*)((char*)pstClnp + sizeof(clnp_head) + sizeof(clnp_addr));

因为pstClnp指针类型的关系, 增加的是 sizeof(clnp) * (sizeof(clnp_head) + sizeof(clnp_head))那么大的地址, 要转换成char*才是按字节增加~

还有void* 没有必要~~

按我写的就对了~
回复
发帖
C语言
创建于2007-09-28

6.3w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-06-07 12:53
社区公告
暂无公告