【C语言】内存函数介绍(上)
C语言学习
内存函数
友情链接:C语言专栏
文章目录
- C语言学习
- 一、memcpy 使用和模拟实现
- 二、memmove 使用
- 附录
- 上文链接
- 专栏
一、memcpy 使用和模拟实现
memcpy是C语言标准库中的一个函数,用于将一段内存中的内容复制到另一段内存中。头文件是<string.h>
。
函数原型:
void * memcpy ( void * dest, const void * src, size_t num );
解释:
- 函数memcpy从src的位置开始向后复制num个字节的数据到dest指向的内存位置。
- 这个函数在遇到 ‘\0’ 的时候并不会停下来。
- 如果src和dest有任何的重叠,复制的结果都是未定义的。
- 返回目标内存的指针,也就是dest的值;
使用示例:
#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] = { 0 };memcpy(arr2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr2[i]);}return 0;
}
输出想必都想到了:
那万一存在重叠的内存,怎么办?
不用着急,对于重叠的内存,交给memmove来处理。
memcpy的模拟实现:
#include <assert.h>
void* my_memcpy(void* dest, const void* src, size_t num)
{assert(dest && src);char* s1 = (char*)dest;const char* s2 = (const char*)src;while (num--){*s1++ = *s2++;}return dest;
}
实现很简单,就逐字节的复制。
二、memmove 使用
memmove是 语言标准库中的一个函数,用于将指定数量的字节从源内存块复制到目标内存块。与memcpy
不同,memmove
可以安全地处理内存重叠的情况,避免数据损坏。头文件是<string.h>
。
函数原型:
void * memmove ( void * dest, const void * src, size_t num );
说明:
- 和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。
- 如果源空间和目标空间出现重叠,就得使用memmove函数处理。
使用示例:
#include <stdio.h>
#include <string.h>
int main()
{int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };memmove(arr1 + 2, arr1, 20);int i = 0;for (i = 0; i < 10; i++){printf("%d ", arr1[i]);}return 0;
}
输出:
附录
上文链接
《字符串与字符函数详解(下)》
专栏
C语言专栏