c/c++语言开发共享是否可以将char *转换为结构体?

这是我的问题,其中一个rcvfrom()参数是一个char *,一旦我从中获取数据,我想将其转换为结构。 但是,演员阵容不成功。 我究竟做错了什么?

这是我做的:

struct { int8_t seq; int8_t ack; bool flag; char data[payload]; }r_pckt; //...bunch of codes char *buf = NULL; buf = (char *)malloc (sizeof(char) * MTU); memset(buf, 0, MTU); //... res = recvfrom(socket_fd, buf, MTU, 0,(struct sockaddr *) &cli_addr, (socklen_t *)&cli_len); //.. r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

它不起作用。 有任何想法吗? 谢谢。

     typedef struct { int8_t seq; int8_t ack; bool flag; char data[payload]; } r_pckt; 

    上面使r_pckt成为一个类型,而不是一个变量。 然后,

     r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

    应该

     r_pckt *tmp_pckt = (r_pckt *) buf; 

    r_pckt不是结构名称,而是变量名称。 尝试

     struct r_pckt { int8_t seq; int8_t ack; bool flag; char data[payload]; }; 

    是的,马克是对的,你不需要那里。

    PS实际上,当“它不起作用”时,它还会为您提供值得阅读的有意义的错误消息。

    您需要删除演员表中的&。 并且(正如其他人已经指出的那样),结构定义和变量声明存在不一致。 我认为大多数编译器会抓住它,所以我怀疑在发布问题时出现了剪切错误。

     struct r_pckt *tmp_pckt = (struct r_pckt *) buf; 

     r_pckt *tmp_pckt = (struct r_pckt *) &buf; 

    应该:

     r_pckt *tmp_pckt = (struct r_pckt *) buf; 

    buf变量是指针类型,并且已经指向通过malloc分配的内存。 获取它的地址可以得到保存数据地址的存储器地址。

    编辑:根据迈克尔的post修复结构声明,你将被设置。

      以上就是c/c++开发分享是否可以将char *转换为结构体?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562214.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐