填充结构中的字段

时间:2012-01-26 20:29:27

标签: c

我正在尝试填充结构中的一个字段,但是如果这样做有点困惑: 以下是结构:

struct ofp_packet_out {
    struct ofp_header header;
    uint32_t buffer_id;           /* ID assigned by datapath (-1 if none). */
    uint16_t in_port;             /* Packet's input port (OFPP_NONE if none). */
    uint16_t actions_len;         /* Size of action array in bytes. */
    struct ofp_action_header actions[0]; /* Actions. */
     uint8_t data[0];         /* Packet data.  The length is inferred
                                     from the length field in the header.
                                     (Only meaningful if buffer_id == -1.) */
};
OFP_ASSERT(sizeof(struct ofp_packet_out) == 16);

我想填写的字段是uint8_t data [0]。假设,它将是一个char数组 我们有一个缓冲区

char * buf[150]={some data};

字段struct ofp_action_header actions [0];是一个动作数组,可用于追加多个动作,其中一个例子是

typedef struct ofp_action_output ofp_action_output;
ofp_action_output  action = *((ofp_action_output*)ofm.actions);
        memset(&action, 0, sizeof(ofp_action_output));
        action.type = htons(OFPAT_OUTPUT);
        action.len = htons(sizeof(ofp_action_output));
        action.port = htons(OFPP_FLOOD);
        action.max_len = htons(0);

其中ofm是struct some_struct ofm;,其中包含字段操作。 我正在努力的是如何用字段uint8_t data[0];做同样的事情 正如我所提到的,我在数组中提取了所需的数据,我需要将数据放入其中 进入结构域uint8_t data[0];,以便我从交换机收到的数据可以发送回它。

如何将其附加到必填字段?所有帮助将不胜感激。 感谢。

1 个答案:

答案 0 :(得分:0)

#include <string.h>
ofp_packet_out myobj;
memcpy(myobj.data, buf, 150);

不是非常安全,但你似乎有一个C不能。

那不会附加它,而是覆盖它。要追加到某个字段,您必须向我显示该字段,因为您当前已将其注释掉。您还需要在目的地中追加的位置。

首先,两个数组/缓冲区必须具有指定的容量,即150个字节。

请原谅我,您是否希望在没有目标地址字段句柄的情况下复制到该结构中?这将需要更多的工作,因为它取决于您的编译器设置前面的字段使用了多少空间。由于内部填充和字对齐,求和sizeof(objname.fieldname)不起作用。