码迷,mamicode.com
首页 > 其他好文 > 详细

一个由sizeof引发的问题

时间:2015-02-02 09:35:18      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

在C/S程序中,往往需要在服务端和客户端传送结构体,在最近的一个项目中定义了如下的结构体:

class ISign
{
public:
	
	unsigned short	m_sSign;
	long	m_sSumLen;
	char	md5[40];
	long	reqId;
};

#define SIGN_LEN	sizeof(ISign)

客户端和服务器端都使用了该结构体,由于在服务器端重新指定了对齐方式(#pragma pack(1)),所以SIGN_LEN的长度是50(2+4+40+4),

但在客户端程序中使用了默认的对齐方式(#pragma pack()),所以SIGN_LEN的长度是52(4+4+40+4)。

在这种情况下,使用SOCKET发送标识头的时候,由于客户端和服务端之间约定的字节流长度不一致,导致程序无法运行。


其他知识点:

可以通过#pragma pack(X), 在代码中改变部分结构体的对齐方式,也可以通过VS2008来设置,如下图

技术分享


参考资料:

http://blog.csdn.net/susan19890313/article/details/7489848

一个由sizeof引发的问题

标签:

原文地址:http://blog.csdn.net/wanglei9876/article/details/43404499

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!