小编Abh*_*osh的帖子

如何在C中使用零长度数组

我们可以使用链接中指定的零长度数组初始化结构:

零长度.

我使用以下结构:

typedef unsigned char UINT8;
typedef unsigned short UINT16;

typedef struct _CommandHeader
{
    UINT16 len;
    UINT8 payload[0];
} CommandHeader;

typedef struct _CmdXHeader
{
    UINT8 len;
    UINT8 payload[0];
} CmdXhHeader;
Run Code Online (Sandbox Code Playgroud)

现在,CommandHeader.payload应该指向/包含到CmdXHeader结构中.即内存应如下所示:

 -------------------------------------------------------------
| CommandHeader.len | CmdXHeader.len | CmdXHeader.payload ....|
 -------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我可以轻松地将malloc CmdXHeader/CommandHeader定制为自定义长度.但是如何为CmdXHeader有效负载分配值或如何将CmdXHeader对象链接到CommandHeader.payload?


我的解决方案

谢谢你的回复.我用以下方式解决了它:

//Get the buffer for CmdXHeader:
size_t cmdXHeader_len = sizeof(CmdXHeader) + custom_len;
CmdXHeader* cmdXHeader = (CmdXHeader*) malloc(cmdXHeader_len);
//Get a temporary pointer and assign the data to it
UINT8* p;
p[0] = 1;
p[2] = 2; …
Run Code Online (Sandbox Code Playgroud)

c struct

3
推荐指数
1
解决办法
3185
查看次数

标签 统计

c ×1

struct ×1