gpt4 book ai didi

c - memcpy重叠不可理解

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:26 24 4
gpt4 key购买 nike

<分区>

我在玩 memcpy 是为了更好地理解它的工作,但我遇到了一些我无法理解的事情。

我从一段非常简单的代码开始:

char str [] = "0123456789abcdef";
memcpy(str + 5, str, 5);
puts(str);// prints 0123401234abcdef

这对我来说完全可以理解。然后我继续:

char str [] = "0123456789abcdef";
memcpy(str + 5, str, 6);
puts(str); // 01234012340bcdef

起初我预计输出为 01234012345bcdef 假设该函数将采用前六个字符,但它再次从 0 开始。好吧,我想,可能它以某种方式从已经构建的新字符串中获取字符。像这样放置 7 memcpy(str + 5, str, 7); 证实了我的假设,因为它产生了 012340123401cdef 作为输出。

但随后事情开始变得更加不明朗。如果我这样做 memcpy(str + 5, str, 8); 它输出 0123401234567def!!!。正如我从一开始就预料的那样。

我完全糊涂了。为什么会这样?好吧,我什至可以理解将 01 打印为字符串的第 11 个和第 12 个字符(但这不是我所期望的,我将不胜感激解释)。但是为什么当我确定长度为 8 时它改变了它的行为???

希望你明白我的意思。请提供详细说明。提前致谢

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com