memcpy 无法复制所有数据

问题描述 投票:0回答:5

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

感谢您的帮助。

c memcpy
5个回答
3
投票

你检查得怎么样?简单地打印字符串或在调试器中查看它?如果消息中包含任何“ ”字符。它将在第一个打印处停止打印。

要查看整个内容,您只需循环并打印每个字符即可。像这样的东西:

int i;
for(i = 0; i < sizeof(wx_msg_buf); ++i) {
   printf("%02x ", wx_msg_buf[i]);
}

1
投票

代码对我来说看起来不错。问题可能出在你看待问题的方式上。底层结构的布局是什么?使用什么工具来观察这 2000 字节?


0
投票

在调试器中检查源数据和结果数据。

memcpy() 有缺陷,这几乎是不可想象的,它的使用如此广泛。


0
投票

尝试一次; “memmove”而不是“memcpy”.. memcpy() 速度更快,但移动源和目标重叠的内存块并不安全。在这些情况下,可以使用 memmove() 来移动内存。

所以最好使用“memmove”..我认为它会解决你的问题


0
投票

好吧,我改变了:

char wx_msg_buf[8192];

进入

char wx_msg_buf[2141];

现在代码可以工作了,我仍然不明白为什么前面的代码不起作用

© www.soinside.com 2019 - 2024. All rights reserved.