标题:火火火-结构指针访问指针成员出错
只看楼主
HAHA66
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-10-22
得分:0 
回复 9楼 吹水佬
帅哥,这个问题靠你了!万分感谢,我在线等
2018-10-22 17:13
HAHA66
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2018-10-22
得分:0 
回复 9楼 吹水佬
这个问题我靠你了,在线等万分感谢!
2018-10-22 17:14
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
这样试试:
  byte *p = tUartCom ->Data;
  for(i=0; i<Len; i++)
  {
    *p++ = *Data++;
  }  

另:
 tDataCom->End1 = tDataCom->Data + tUartCom->Length;  
 tDataCom->End2 = tDataCom->End1 + 1;
 tDataCom->End3 = tDataCom->End2 + 1;
只从上面几句看,End1、End2和End3是由tDataCom->Data算来的,无必要在结构里定义。
这样将tDataCom->Data变成结构的最后一个成员,变成一个柔性数组。如:
typedef struct
{
    byte Head;
    byte Length;
    byte Cmd;
    byte Data[];
} SturctComData;

    uint8_t buf[5] = {0x11, 0x12, 0x13, 0x14};
    uint8_t TxBuf[20] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
    SturctComData *tDataCom = (SturctComData*)TxBuf;
    uint8_t *Data = buf;
    uint8_t *p = tDataCom->Data;
    int i;
    for (i=0; i<4; ++i)
        *p++ = *Data++;
    for (i=0; i<7; ++i)
        printf("0x%02x ", TxBuf[i]); //结果:0x01, 0x02, 0x03, 0x11, 0x12, 0x13, 0x14


2018-10-22 22:06
halsan
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2018-10-24
得分:10 
回复 10楼 HAHA66
我是新手,求教:
SturctComData *tDataCom = (SturctComData*)TxBuf;
这个数组占用内存大小和结构大小相同吗?如果不同,也能把这个数组硬转为结构指针吗?
2018-10-24 13:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用halsan在2018-10-24 13:57:08的发言:

我是新手,求教:
SturctComData *tDataCom = (SturctComData*)TxBuf;
这个数组占用内存大小和结构大小相同吗?如果不同,也能把这个数组硬转为结构指针吗?

并不是什么“硬转”,只是定义一个 SturctComData * 类型的指针 tDataCom 指向 TxBuf 数组的首地址。
至于TxBuf占用内存大小要看具体实际应用而定,通常要求不会比SturctComData的小。
如果只需要获取SturctComData的Head和Length成员的数据,TxBuf占用2个byte就够。
2018-10-24 14:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490596-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.342716 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved