如果指针引用的数据也在memcpy
的范围内,memcpy
是否会调整指向复制数据的指针? (我假设没有,但一个人永远都不知道......)
因此,假设,例如,复制指针指向此指针引用的内容。问题是:指针是否被愚蠢地复制(即没有改变),还是被调整为指向新复制的内容?
答案 0 :(得分:4)
不,memcpy盲目地将x字节从源复制到目的地。
答案 1 :(得分:0)
内部memcpy
的作用超出了规范的范围。在外部,对任何指针的任何更改都是不可见的,因为memcpy
适用于作为参数传递的指针的副本。
答案 2 :(得分:0)
根据this来源,它没有。
答案 3 :(得分:0)
根据标准,如果源和目标指针重叠,则行为是未定义的。
来自valgrind
- 手册
==27492== Source and destination overlap in
memcpy(0xbffff294, 0xbffff280, 21)
==27492== at 0x40026CDC: memcpy
(mc_replace_strmem.c:71)
==27492== by 0x804865A: main (overlap.c:40)
您不希望这两个块重叠,因为其中一个块可能被复制部分覆盖。
...
此外,对于其中许多功能,POSIX标准的措辞如下:“如果在重叠的对象之间进行复制,则行为未定义。”因此,重叠的副本违反了标准。
同样看here:
Description
The memcpy() function copies n bytes from memory area src to memory area dest.
The memory areas must not overlap. Use memmove(3) if the memory areas do overlap.
答案 4 :(得分:0)
memcpy
不会修改任何指针;它只修改dst
参数指向的内存块的内容。
memcpy
。在这种情况下,应使用memmove
。
答案 5 :(得分:0)
memcpy()
的原型是
void * memcpy ( void * destination, const void * source, size_t num );
它将num字节的值从source指向的位置直接复制到destination指向的内存块。它返回一个指向目标的指针。