我在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)。 我想知道的是为什么会发生这种情况?如果需要更多代码,请告诉我
谢谢你的帮助。
答案 0 :(得分:3)
你好吗?只需打印字符串或在调试器中查看它?如果消息中包含任何“\ 0”字符。它将在第一个停止打印。
要查看整个内容,您可以循环浏览并打印每个字符。像这样:
int i;
for(i = 0; i < sizeof(wx_msg_buf); ++i) {
printf("%02x ", wx_msg_buf[i]);
}
答案 1 :(得分:1)
代码看起来很好。问题可能出在你看待它的方式上。底层结构的布局是什么,以及您使用哪些工具来观察2000字节?
答案 2 :(得分:0)
在调试器中检查源数据和结果数据。
memcpy()有一个缺陷几乎是不可思议的,它被广泛使用。
答案 3 :(得分:0)
尝试一次; “memmove”而不是“memcpy”.. memcpy()更快,但移动源和目标重叠的内存块是不安全的。在这些情况下,memmove()可用于移动内存。
所以最好使用“memmove”..我认为它会解决你的问题
答案 4 :(得分:0)
好的,我改变了:
char wx_msg_buf[8192];
到
char wx_msg_buf[2141];
现在代码工作了,我仍然无法理解为什么以前的代码不起作用