【发布时间】:2011-03-15 11:59:34
【问题描述】:
这样好吗?
char buf[] = { 0, 1, 2 };
memcpy(buf, buf + 1, 2);
拥有更大的数据类型有什么不同吗?我知道我可以使用 memmove(),但我只是好奇。
【问题讨论】:
-
-1:你尝试的时候发生了什么?
-
+1,因为我不同意pmg的-1。 “当你在标准中查找它时发生了什么?”,也许,但在试验这种东西时存在真正的风险,你可能会尝试它并且它“有效”,结果
{1,2,2}在缓冲区中。那么尝试它的建议有什么用呢?下周,或者当您开启优化,或在您客户的计算机上,它是否仍然有效? -
@Steve Jessop:我同意。 OP 的示例(可能)会起作用,具体取决于
memcpy的特定目标平台实现,但这并不是一个好主意! -
事情是:他说 “我知道我可以使用 memmove()” 并且他仍然问
memcpy()是否可以。他怎么知道他可以使用 memmove 和 NOT KNOW 不能对重叠对象使用 memcpy? -
@pmg:我想我有点不清楚。我不知何故未能找到明确的答案,因为它是未定义的行为,但显然没有在代码中留下这样的东西。我出于好奇尝试了它,在这种特殊情况下它适用于我的编译器。