memcpy无法复制所有数据

时间:2010-07-01 05:21:46

标签: c memcpy

我在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)。 我想知道的是为什么会发生这种情况?如果需要更多代码,请告诉我

谢谢你的帮助。

5 个答案:

答案 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];

现在代码工作了,我仍然无法理解为什么以前的代码不起作用