将具有动态字符串的结构复制到缓冲区 c
Posted
技术标签:
【中文标题】将具有动态字符串的结构复制到缓冲区 c【英文标题】:copy a struct with dynamic strings to a buffer c 【发布时间】:2016-12-03 16:30:26 【问题描述】:我有这个结构:
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;
我想创建一个缓冲区并将数据插入其中,以便我可以将此数据发送到我的服务器。
-
我不确定缓冲区需要是什么类型 (uint8_t/char/auth_start)。
我不知道我应该怎么做,我应该用 memcpy() 1 逐 1 复制每个字段吗?还是有其他方法?
谢谢! :)
【问题讨论】:
【参考方案1】:我不确定缓冲区需要是什么类型
任何字节类型都可以。 uint8_t
是个不错的选择,考虑到你的struct
中非指针字段的类型都是uint8_t
。
我不知道该怎么做,我应该用
memcpy()
一一复制每个字段
首先,您需要确定缓冲区需要多少内存。您分配该内存,并使用分配复制非指针部分。最后,你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
【讨论】:
非常感谢!以及如何检查缓冲区是否良好?我需要将 p 重置为 auth 的开头并循环打印? @phantttom 实际指针是 buf,而不是 p。如果要处理下一个结构,请将 p 重置回 buf。以上是关于将具有动态字符串的结构复制到缓冲区 c的主要内容,如果未能解决你的问题,请参考以下文章