c - 包含 char 数组的结构的 memcpy 失败
问题描述
struct Frame_t
{
uint16_t src_id;
uint16_t dst_id;
unsigned char num;
uint8_t is_seq;
char data[48];
};
typedef struct Frame_t Frame;
char *convert_frame_to_char(Frame *frame)
{
char *char_buffer = (char *)malloc(64);
memset(char_buffer,
0,
64);
memcpy(char_buffer,
frame,
64);
return char_buffer;
}
Frame *convert_char_to_frame(char *char_buf)
{
Frame *frame = (Frame *)malloc(sizeof(Frame));
memset(frame->data,
0,
sizeof(char) * sizeof(frame->data));
memcpy(frame,
char_buf,
sizeof(char) * sizeof(frame));
return frame;
}
如果我这样做的话,可以给出这些效用函数
Frame *outgoing_frame = (Frame *)malloc(sizeof(Frame));
// outgoing_cmd->message contains "I love you"
strcpy(outgoing_frame->data, outgoing_cmd->message);
outgoing_frame->src_id = outgoing_cmd->src_id; // 0
outgoing_frame->dst_id = outgoing_cmd->dst_id; // 1
outgoing_frame->num = 100;
outgoing_frame->is_seq = 1;
//Convert the message to the outgoing_charbuf
char *outgoing_charbuf = convert_frame_to_char(outgoing_frame);
// Convert back
Frame *test = convert_char_to_frame(outgoing_charbuf);
// print test->data is "I "
test src 为 0,test dst 为 1,data 为“I”,test num 为 d,test is_seq 为 1。
那么,为什么数据只有 2 个字符?无损地做到这一点的正确方法是什么?
谢谢!
解决方案
memcpy(frame,
char_buf,
sizeof(char) * sizeof(frame));
应该
memcpy(frame,
char_buf,
sizeof(Frame));
size(frame)
是指针的大小。因此,您只是size of pointer
从数组中复制字节。
推荐阅读
- pyspark - PySpark:删除从其他人派生的行
- sql - SQL 使用 getdate() 声明一个变量以在 SAP B1 中运行比较
- python-3.x - PyTorch 中的左移张量
- c - 获取输入并使用它来初始化数组有效,但根据 C ,它不应该
- javascript - Javascript:如何根据时间戳自动从 Firestore 中删除数据
- c - 我运行 libimobiledevice 入门代码,出错了吗?
- java - 不使用 selenium java 从城市字段中选择
- c# - 有没有办法获得证书c#私有部分的到期日期?
- time-complexity - O(n + n) 和 O(n) 之间的差异
- javascript - MongoDB查找键存在且值等于true的对象