memcpy memmove memset直接对内存进行操作而不需要考虑内存存放的数据类型。
本片博客内容参考https://blog.csdn.net/zhuohaiyy/article/details/79118114 版权归原作者所有。
在C语言中存在strcopy, strcmp, strcat这些函数分别实现字符串的拷贝,比较和拼接。
strcopy原型,实现从后者到前者的字符串复制
1 | char *strcpy(char *strDest, const char *strSrc); |
strcmp原型,实现字符串1与字符串2的比较,返回字符串1>字符串2的结果
1 | int strcmp(const char *str1,const char *str2); |
strcat原型,将后者的字符串拼接到前者
1 | char *strcat(char* dest,const char* src); |
但是这些只能实现字符串的相关操作,如果要实现任意一种数据类型的操作则无能为力,因此C语言提供了对内存进行操作的三个函数。
- memcpy原型,以字节为单位,实现从后者到前者的拷贝,并且拷贝顺序是从前往后,但是memcopy函数没有考虑内存重叠问题,因此拷贝内存存在一定风险。详细参考开头提供的博客。
1
void * memcpy ( void * destination, const void * source, size_t num );
- memmove原型,函数原型同memcpy一样,但是内部考虑内存重叠的方式,如果从前往后拷贝存在重叠问题,那么memmove会采用从后往前的拷贝方式。
1
void * memmove ( void * destination, const void * source, size_t num );
- memset原型,从ptr开始对连续num个字节的内存赋值value。常常用于C语言中构建全零数组。
1
void * memset ( void * ptr, int value, size_t num );