首页 > 代码库 > 一个由sizeof引发的问题
一个由sizeof引发的问题
在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引发的问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。