您的位置:首页 > 其它

这里你应该使用什么?

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个字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: