这里你应该使用什么?
2007-11-14 20:38
204 查看
我再做程序的时候,碰到了一个这样的需求:
相一个装置发送数据,信息分为消息的一些必选字段,和一些说明语言,说明语言可多可少,要根据具体的需求。因此,我曾经写了现面的一个结构体。
typedef struct mySendMsg_t{
mySendMsg_t()
{
dwSendToID = dwSendID = nType = 0;
msg = NULL;
}
/* deleted bu nostopstep;不用再使用这段代码了
~mySendMsg_t()
{
delete []msg;
}
*/
BuildMsg(DWORD dw_RecID, DWORD dw_SendID, byte Type, char* SendMsg, DWORD dwMsglen)
{
......
//不用指针了,这行就该退休。msg = new char[dwMsglen];
memcpy(msg, SendMsg, dwMsglen);
}
DWORD dwSendToID; //接收方的ID;
DWORD dwSendID;//发送方ID;
byte nType; //消息类型;
char msg[0]; //在这里使用指针可不是好主意 nostopstep char * msg;
}t_SendMsg;
然而,再使用过程中的诸多不便,让我最后决定不用cha*,有一个最大原因就是char* 的内容和本结构体的地址不一定是连续的。当然还有其它的不便,最后,为了不大改动已经搭好的框架,有让问题能够方便解决,我把char * msg 换成了char msg[0];然后一切照旧使用只不过不用new 了,这样所遇到的问题就解决了,因此,提醒大家,再定义结构体的时候,有时候,不一定可变长度的参数就一定要使用指针。使用char msg[0];能够保证结构体的连续性。并也不会再刚开始的时候就多占用你4个字节。
相一个装置发送数据,信息分为消息的一些必选字段,和一些说明语言,说明语言可多可少,要根据具体的需求。因此,我曾经写了现面的一个结构体。
typedef struct mySendMsg_t{
mySendMsg_t()
{
dwSendToID = dwSendID = nType = 0;
msg = NULL;
}
/* deleted bu nostopstep;不用再使用这段代码了
~mySendMsg_t()
{
delete []msg;
}
*/
BuildMsg(DWORD dw_RecID, DWORD dw_SendID, byte Type, char* SendMsg, DWORD dwMsglen)
{
......
//不用指针了,这行就该退休。msg = new char[dwMsglen];
memcpy(msg, SendMsg, dwMsglen);
}
DWORD dwSendToID; //接收方的ID;
DWORD dwSendID;//发送方ID;
byte nType; //消息类型;
char msg[0]; //在这里使用指针可不是好主意 nostopstep char * msg;
}t_SendMsg;
然而,再使用过程中的诸多不便,让我最后决定不用cha*,有一个最大原因就是char* 的内容和本结构体的地址不一定是连续的。当然还有其它的不便,最后,为了不大改动已经搭好的框架,有让问题能够方便解决,我把char * msg 换成了char msg[0];然后一切照旧使用只不过不用new 了,这样所遇到的问题就解决了,因此,提醒大家,再定义结构体的时候,有时候,不一定可变长度的参数就一定要使用指针。使用char msg[0];能够保证结构体的连续性。并也不会再刚开始的时候就多占用你4个字节。
相关文章推荐
- 什么时候应该使用Web Service
- [转载] 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么情况下应该使用Web Service?
- 什么时候应该使用$scope.$apply()
- 浅析基本类型和对象应该使用什么做比较
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- 什么时候应该使用Web Service
- 在springmvc中使用@PathVariable时,应该注意点什么?
- 普元 ESB 6.6,在开发的中介流中需要使用queryByNamedSql方法,这个方法对应的namedSql文件应该放在什么位置下?
- 什么情况下应该使用Web Service?
- Web service到底是什么?在什么情况下你应该使用Web service
- MySQL 中你应该使用什么数据类型表示时间?
- 是什么引起执行计划变得极其糟糕? 应该使用更新统计信息来解决它吗?
- C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?
- 什么时候应该使用Web Service -
- C#争论:什么时候应该使用var?
- Web Service学习笔记:什么时候应该使用Web Service
- Java技术_Java千百问(0009)_java开发应该使用什么工具
- hibernate之什么时候应该使用悲观锁?
- 什么情况下应该使用对象池(ObjectPool)?