C-memmove()函数-在这个实现中我移动了多少字节?

C-memmove()函数-在这个实现中我移动了多少字节?,c,memmove,C,Memmove,这似乎是个好地方。我的问题是,在memmove()的这个实现中,我移动了什么值(或多少字节) 在下一个例子中,它说我移动了11个字节。但是是什么让它变成了11个字节呢?有人能解释一下吗 int main () { char str[] = "memmove can be very useful......"; memmove (str+20,str+15,11); //source and destination are reversed puts (str); return 0; } 谢谢

这似乎是个好地方。我的问题是,在memmove()的这个实现中,我移动了什么值(或多少字节)

在下一个例子中,它说我移动了11个字节。但是是什么让它变成了11个字节呢?有人能解释一下吗

int main ()
{
char str[] = "memmove can be very useful......";
memmove (str+20,str+15,11); //source and destination are reversed
puts (str);
return 0;
}
谢谢



编辑:顺便说一句,字符串长度为33,包括终止的空字符。

memmove()的最后一个参数是要移动的字节数-在本例中11

memmove()的最后一个参数是要移动的字节数-在本例中11

memmove的第三个参数指定要移动的字节数,在第二个示例中,移动了11个字节。您的第一个示例不应编译,因为在调用
memmove

的行中将出现语法错误
memmove
的第三个参数指定要移动的字节数,因此在第二个示例中,您移动了11个字节。您的第一个示例不应编译,因为在调用
memmove

的行中会出现语法错误。第三个参数定义要复制的字节数;在第一个示例中,您应该定义要复制的字节数

第三个参数定义要复制的字节数;在第一个示例中,您应该定义要复制的字节数

int main()
应该是
int main(void)
。更重要的是,您需要
\include
\include
。如果您的编译器没有警告您,请将其警告级别提高到警告级别。您向我们展示的不是“memmove()的实现”,而是一个调用
memmove()
的程序。
memmove()
的一个实现是运行库中实际复制字节的代码。11表示11个字节。嗯。在第一个示例中,只有将数字替换为/*?*/,才能移动任何对象。你把memmove和strcpy混淆了吗?
intmain()
应该是
intmain(void)
。更重要的是,您需要
\include
\include
。如果您的编译器没有警告您,请将其警告级别提高到警告级别。您向我们展示的不是“memmove()的实现”,而是一个调用
memmove()
的程序。
memmove()
的一个实现是运行库中实际复制字节的代码。11表示11个字节。嗯。在第一个示例中,只有将数字替换为/*?*/,才能移动任何对象。你把memmove和strcpy混淆了吗?不正确
str+15
&str[15]
相同;这两个表达式的类型都是
char*
。我在编辑后删除了我的否决票(尽管这仍然与其他答案重复)。不正确
str+15
&str[15]
相同;这两个表达式的类型都是
char*
。我在编辑后删除了我的下一票(尽管这与其他答案仍然是多余的)。@Keith Thompson你知道在第一个示例中它应该是多少字节吗?@Mikemm:你想做什么?@Keith Thompson我想左移数组的元素,把最初的一个写在右边,然后把所有的元素都写在右边。有点像从队列中删除。@Keith Thompson你知道第一个示例中应该有多少字节吗?@Mikemm:你想做什么?@Keith Thompson我试图左移数组的元素,将初始元素写在右边,然后将所有元素写在右边。有点像从队列中删除。
int main ()
{
char str[] = "memmove can be very useful......";
memmove (str+20,str+15,11); //source and destination are reversed
puts (str);
return 0;
}