我知道如果有重叠,我应该使用memmove,但我无法想象sprintf(或memcpy(是如何编码的,这样它就会遇到问题。
源和目标明显重叠。所以,是的,这很重要。
C标准是明确的,因此您不应该对如何实现memcpy
做出任何假设。想象一下,在一个体系结构中,可以比按顺序更有效地读取无序写入的内存。memcpy
的实现者可以利用非重叠约束来发布CPU指令,这些指令一次以不确定的顺序移动多个字,从而可能在读取源字节之前覆盖源字节。