0

我有一个.proto看起来像这样的文件:

message ObjValue
{
// ...
    optional bytes byteval    = 6 [max_size = 256]; // arbitrary structure or message
// ...

我使用这个原型编码来发送改变的结构。这个结构基本上包含整数和字符串(一个以 null 结尾的 char 数组)。

发件人发送结构做这样的事情:

   // Here I create the struct and fill it with integers and strings
   struct flow_msg *flow_msg = malloc(sizeof(struct flow_msg));
    flow_msg->dst_addr        = 1;
    flow_msg->src_addr        = 2;
    flow_msg->src_ap_name     = strdup(src_ap_name);

    // Here I save the length of the struct and a void pointer that points to the struct
    struct ser_obj_value *obj_value = malloc(sizeof(struct ser_obj_value));
    obj_value->size = sizeof(struct flow_msg) + strlen(src_ap_name) + 1; // +1 because of '\0'
    obj_value->data = flow_msg;

然后,接收者获取消息,使用 nanopb 对其进行解码,然后:

int
handle_msg(void *f_msg)
{
    struct flow_msg *flow_msg = (struct flow_msg *)f_msg;
}

那时,如果我尝试读取整数的值,则没有问题(flow_msg->dst_addr例如),但如果我想读取字符串值,我会得到一个空指针,因为它flow_msg->src_ap_name是空的。

我不知道应该如何正确编码/解码字符串值......真的不知道我在这里错过了什么......任何线索?

4

1 回答 1

0

首先,我现在意识到我的问题是多么愚蠢。实际上,我不会删除它,因为@jpa 花了一些时间试图回答我的疑问。

主要问题是我试图发送指针(即内存地址),然后接收方当然不知道如何处理这个随机内存地址。此外,问题是我“不走运”,这可能是因为我在接收端使用了相同的机器和相同的编译器,一些指针实际上被正确取消引用,这让我很困惑。

于 2021-12-21T16:49:49.110 回答