c - 使用 send 的结构内部的指针

标签 c pointers struct

我有以下结构,我正在尝试通过网络发送到另一个应用程序

 struct protocol
  {

     char protocol;
     char field1;
     char field2;
     char field3;
     char field4;
     char field5;
     char field6;
     char field7;
     char field8;
     char msg_id;
     char msg_length;
     char *msg;

  };

我遇到的问题是,我不确定如何通过网络发送这个结构,因为有一个指针指向其中的字符串,并且 memcpy 到缓冲区的结构不起作用,如下所示唯一的方法吗?

memcpy (buffer, protocol->protocol, char)
memcpy (buffer, protocol->field1, char)
...
memcpy (buffer, protocol->msg, protocol->length)

然后发送缓冲区

最佳答案

您需要将结构序列化到某种缓冲区中。您的副本顺序仅在概念上是正确的;有无数细节需要解决:

char buffer[sizeof(struct protocol) + protocol->msg_length]; // Over-allocation

buffer[0] = protocol->protocol;
buffer[1] = protocol->field1;
...
buffer[8] = protocol->field8;
buffer[9] = protocol->msg_id;
buffer[10] = protocol->msg_len;
memcpy(&buffer[11], protocol->msg, protocol->msg_len);

现在您可以写入正确的缓冲区长度(11 + protocol->msg_len)来发送。

这个特别简单;无需担心字节序问题。通常,对于 shortintlong long 等多字节值,您必须担心传输的字节顺序。

关于c - 使用 send 的结构内部的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998798/

相关文章:

c - 将硬 float 链接到 softfp 不良性能

c - 在 C 中使用 strncat 时出现段错误

c - 为什么我没有正确寻址我的结构元素?

c - 用C语言将数据写入文件[序列化]

在函数中定义的结构

c - 使用 C 进行数字到字符串的映射

c - 如何在静态声明期间在结构中指定灵活的数组成员大小

c - 输出说明

c - 为什么指针变量不显示 100 位数字?

C 直接/显式传递参数