将struct的成员声明为c中的指针并使用它

时间:2012-10-12 00:04:30

标签: c pointers struct contiki

  • 我有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(con​​tiki)中有一个名为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和其他一些整数的值发送到另一个节点。我怎样才能正确地做到这一点。

1 个答案:

答案 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));