c语言 - sprint(buf, "%s", buf+10) 其中 strlen(buf+10)>10 算作重叠吗?



我知道如果有重叠,我应该使用memmove,但我无法想象sprintf(或memcpy(是如何编码的,这样它就会遇到问题。

源和目标明显重叠。所以,是的,这很重要。

C标准是明确的,因此您不应该对如何实现memcpy做出任何假设。想象一下,在一个体系结构中,可以比按顺序更有效地读取无序写入的内存。memcpy的实现者可以利用非重叠约束来发布CPU指令,这些指令一次以不确定的顺序移动多个字,从而可能在读取源字节之前覆盖源字节。

最新更新