【发布时间】:2010-07-01 05:21:45
【问题描述】:
我在 C 中遇到 memcpy 问题。这是代码:
typedef struct {
CPY_IM009_DEF
}message;
message msg;
CPY_IM009_DEF 是其他文件中的结构。那我试试这个
char wx_msg_buf[8192];
memset(wx_msg_buf, 32, sizeof (wx_msg_buf));
memcpy(wx_msg_buf, &msg, sizeof (msg));
当我检查尺寸时:
sizeof (msg) = 2140
sizeof (wx_msg_buf) = 8192
但是当我检查 wx_msg_buf 时,memcpy 只会将部分 msg 复制到 wx_msg_buf(从 2140 到 200)。 我想知道为什么会这样?如果需要更多代码,请告诉我
感谢您的帮助。
【问题讨论】:
-
我想我们需要看看CPY_IM009_DEF的定义
-
您没有显示
msg正在初始化,因此可以想象它从未设置过,memcpy正在做它应该做的事情,除了你正在喂它垃圾源数据。当您更改缓冲区的大小时(在对您的问题的评论中作为答案),它可能已经改变了内存的布局,使得未初始化的数据区域看起来更符合您的期望看到 - - 可能字节未设置为 0。 -
其实msg已经初始化了,但是因为代码太大就不放这里了。