网站首页 > 文章中心 > 其它

c语言函数memmove_c语言memmove函数用法

作者:小编 更新时间:2023-08-19 13:52:46 浏览量:365人看过

C语言,请问memmove与memcpy的作用有什么区别?

唯一的区别在于操作的源和目的

用memmove,源和目的可以是同一块内存区域

用memcpy,源和目的不能是同一块内存区域

比如int

memcpy与memmove的区别

memcpy和memmove都是C语言的库函数,相比于strcpy和strncpy只能拷贝字符串数组,memcpy与memmove可以拷贝其它类型的数组,但是为什么要同时提供两种方法呢?本文主要就是介绍这两个函数的区别.

首先来看函数原型:

我们来看一组示例:

正常情况下,即使内容有重叠,src的内容也可以正确地被拷贝到了dest指向的空间.

一般来说,memcpy的实现非常简单,只需要顺序的循环,把字节一个一个从src拷贝到dest就行:

memmove会对拷贝的数据作检查,确保内存没有覆盖,如果发现会覆盖数据,简单的实现是调转开始拷贝的位置,从尾部开始拷贝:

这里 __np_anyptrlt 是一个简单的宏,用于结合拷贝的长度检测dest与src的位置,如果dest和src指向同样的对象,且src比dest地址小,就需要从尾部开始拷贝.否则就和memcpy处理相同.

由此可见memcpy的速度比memmove快一点,如果使用者可以确定内存不会重叠,则可以选用memcpy,否则memmove更安全一些.另外一个提示是第三个参数是拷贝的长度,如果你是拷贝10个double类型的数值,要写成sizeof(double)*10,而不仅仅是10.

从c语言中 memmove()在哪个头文件里

$ man memmove

NAME

memmove - copy memory area

SYNOPSIS

#include string.h

void *memmove(void *dest, const void *src, size_t n);

DESCRIPTION

The memmove() function copies n bytes from memory area src to memory area dest. The

memory areas may overlap.

RETURN VALUE

The memmove() function returns a pointer to dest.

CONFORMING TO

SEE ALSO

c语言中memmove函数如何实现?

这个就使用系统的呗,和memcpy差不多,系统是用汇编写的,效率高些.

思路和memcpy一样,就是两个指针对考数据呗,完了把移动前的数据置0就行了.

以上就是土嘎嘎小编为大家整理的c语言函数memmove相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章