将带有动态字符串的结构复制到缓冲区c

时间:2016-12-03 16:30:27

标签: c struct copy buffer

我有这个结构:

typedef struct
{
   auth_header header; // another struct
   uint8_t action;
   uint8_t priv_lvl;
   uint8_t authen_type;
   uint8_t service;
   uint8_t user_len;
   uint8_t port_len;
   uint8_t rem_addr_len;
   uint8_t data_len;
   char *user;
   char *port;
   char *rem_addr;
   char *data;

} auth_start;

我想创建一个缓冲区并在其中插入数据,这样我就可以将这些数据发送到我的服务器。

  1. 我不确定缓冲区需要什么类型(uint8_t / char / auth_start)。
  2. 我不知道该怎么办,我应该用memcpy()逐个复制每个字段吗?还是有另一种方式?
  3. 谢谢! :)

1 个答案:

答案 0 :(得分:1)

  

我不确定缓冲区需要什么类型

任何字节类型都可以。考虑到uint8_t中的非指针字段类型均为structuint8_t是一个不错的选择。

  

我不知道该怎么做,我应该用memcpy()逐个复制每个字段

首先,您需要确定缓冲区需要多少内存。您分配该内存,并使用赋值复制非指针部分。最后,您从{4}指向memcpy数据:

auth_start s = ...
// Add 8 for the initial 8 members
uint8_t *buf = malloc(8+s.user_len+s.port_len+s.rem_addr_len+s.data_len);
uint8_t p = buf;
// Copy the initial fields
*p++ = s.action;
*p++ = s.priv_lvl;
... // And so on for the remaining members
// Copy pointer-based members
memcpy(p, s.user, s.user_len);
p += s.user_len;
memcpy(p, s.port, s.port_len);
p += s.port_len;
... // And so on for the remaining pointer members