这里你应该使用什么?

 我再做程序的时候,碰到了一个这样的需求:

相一个装置发送数据,信息分为消息的一些必选字段,和一些说明语言,说明语言可多可少,要根据具体的需求。因此,我曾经写了现面的一个结构体。

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个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值