我在 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));
当我检查尺寸时:
大小(消息)= 2140
大小(wx_msg_buf)= 8192
但是当我检查wx_msg_buf时,memcpy只将部分msg复制到wx_msg_buf(从2140到200)。 我想知道为什么会发生这种情况?如果需要更多代码请告诉我
感谢您的帮助。
你检查得怎么样?简单地打印字符串或在调试器中查看它?如果消息中包含任何“ ”字符。它将在第一个打印处停止打印。
要查看整个内容,您只需循环并打印每个字符即可。像这样的东西:
int i;
for(i = 0; i < sizeof(wx_msg_buf); ++i) {
printf("%02x ", wx_msg_buf[i]);
}
代码对我来说看起来不错。问题可能出在你看待问题的方式上。底层结构的布局是什么?使用什么工具来观察这 2000 字节?
在调试器中检查源数据和结果数据。
memcpy() 有缺陷,这几乎是不可想象的,它的使用如此广泛。
尝试一次; “memmove”而不是“memcpy”.. memcpy() 速度更快,但移动源和目标重叠的内存块并不安全。在这些情况下,可以使用 memmove() 来移动内存。
所以最好使用“memmove”..我认为它会解决你的问题
好吧,我改变了:
char wx_msg_buf[8192];
进入
char wx_msg_buf[2141];
现在代码可以工作了,我仍然不明白为什么前面的代码不起作用