我有uint8_t *C = malloc(24*sizeof(uint8_t));
我需要将一些整数和此* C发送到另一个节点(在ad hoc网络中)。所以我将使用结构
struct fulMsg {
int msgType;
int msgCount;
//uint8_t *CC;
} fulMsg_t;
typedef struct fulMsg fulMsg_tt;`
我的api(contiki)中有一个名为packetbuf_copyfrom(X, sizeof(X));
的方法。如果我像这样struct fulMsg *fmsg = &fulMsg_t;
创建结构,我可以像上面packetbuf_copyfrom(fmsg, 8);
那样使用上面的方法,从另一端我可以很容易地得到这两个值。
所以我的问题是,当我要对该指针应用相同的东西时,它正在使用我正在使用的网络模拟器突然崩溃(我认为存在分段错误)。我无法在struct no中初始化* C的大小。以及如何正确执行此fmsg->CC = C;
另一方面,我收到此结构的方式是struct fulMsg *r_fmsg = &fulMsg_t;
和rfmsg = (fulMsg_tt *)(packetbuf_dataptr());
。所以我可以很容易地从另一端获得价值。 (不需要做ntoh和hton,但如果真的需要那就没问题)
简单地说,我想要做的是将* C contains和其他一些整数的值发送到另一个节点。我怎样才能正确地做到这一点。
答案 0 :(得分:1)
我不熟悉contiki,并且似乎没有太多方便的文档,但是根据我的确发现,看起来这个函数不够聪明,不知道你的struct的哪些部分是指针,所以我的猜测是它不是为此而设计的。我认为你必须制作一个直接包含完整数组的结构,例如,
struct fulMsg {
int msgType;
int msgCount;
uint8_t CC[24];
} fulMsg_t;
typedef struct fulMsg fulMsg_tt;
fulMsg_tt msg;
uint8_t *C = malloc(24*sizeof(uint8_t));
// Do whatever with this array, then
msg.msgCount = 24; // or whatever
memcpy(&msg.CC, C, 24*sizeof(uint8_t));
packetbuf_copyfrom(&msg, sizeof(fulMsg_tt));