0

次のようなファイルがあり.protoます。

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

このプロト エンコーディングを使用して、変化する構造体を送信します。この構造体には、基本的に int と文字列 (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空であるため null ポインターが取得されます。

文字列値を適切にエンコード/デコードする方法がわかりません...ここで何が欠けているのか本当にわかりません...手がかりはありますか?

4

1 に答える 1