首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strlen( buf+10) >10的sprint(buf,"%s",buf+10)算重叠吗?

strlen( buf+10) >10的sprint(buf,"%s",buf+10)算重叠吗?
EN

Stack Overflow用户
提问于 2022-03-02 11:04:05
回答 2查看 60关注 0票数 1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-02 11:35:58

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

票数 3
EN

Stack Overflow用户

发布于 2022-03-02 12:40:33

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71321579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档