gpt4 book ai didi

memmove()的代码

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

下面的代码片段显示了 memmove() 的实现。

void my_memmove(void* dest, const void* src, size_t size)
{
unsigned int i;

char* d = (char*)dest;
char* s = (char*)src;

if( s > d )
{
for( i = 0; s[i] && i < size; ++i )
d[i] = s[i];
}
else
for( i = size-1; d[i] && i >= 0; --i )
d[i] = s[i];
}

int main()
{
char my_str[] = "abcdefgh";

char str[] = "abcdefgh";

my_memmove(my_str+1, my_str, 4);

memmove(str+1, str, 4);

printf("%s %s\n", my_str, str);

return 0;
}

我得到了 output如:

 aabcdfgh  

为什么 my_memmove() 无法正常工作(它更改 my_str 使其输出空字符串)?

最佳答案

对于无符号 整数,条件i >= 0 始终为真。最好用“-1”反转偏差编写惯用循环:

for (i = 0; i != size; ++i)
d[size - i - 1] = s[size - i - 1];

此外,附加条件 s[i] && 看起来完全错误。

关于memmove()的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12038269/

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