目录
- 一、前言
- 二、memcpy(内存复制)
- 三、 memmove(内存移动)
- 四、memset(内存设置)
- 五、memcmp(比较指定字节)
- 六、End
一、前言
在C语言中有着常见的内存函数,他们可以对内存进行操作,即可以修改内存的内容等,下面我们来简略地学习一下
二、memcpy(内存复制)
cpy是复制的意思,顾名思义,就是将一块指定大小的内存的字节逐一赋值到新的内存块上,下面是memcpy的定义
void * memcpy ( void * destination, const void * source, 1 size_t num );
下面我们可以举一个简单的使用案例
#include <stdio.h> #include <string.h> int main() { int arr1[10] = { 0,1,2,3,4,5,6,7,8,9 }; int arr2[10]; memcpy(arr2, arr1, sizeof(arr1)); for (int i = 0; i < 10; i++) { 编程 printf("%d android", arr2[i]); } printf("\n"); return 0; }
可以看到,这里我将arr1数组的内存数据复制到了arr2数组中
memcpy使用细节:
- 目标空间大小不能小于要拷贝的内存的大小
- memcpy不会因为遇到’\0’而停止
- memcpy目标内存不能是拷贝的内存,不然复制的结果是不可预知的,也就是说内存不能重叠,如:memcpy(arr, arr, …)
三、 memmove(内存移动)
memmove的功能与memcpy的功能可以说是一样的,但是memmove有一个与memcpy不同的点,就是memmove可以操作重叠的内存,因为memmove会将要复制的内存的内容复制到临时缓冲区,然后再复制带目标内存中
vEoDyDONhIoid * memmove ( void * destination, const void * source,size_t num );
下面我们进行演示
#include <stdio.h> #include <string.h> int main() { int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 }; int arr2[10]; memmove(arr2, arr1, sizeof(arr1)); memmove(arr1 + 1, arr1, sizeof(int) * 9); for (int i = 0; i < 10; i++) { printf("%d ", arr1[i]); } printf("\n"); for (int i = 0; i < 10; i++) { printf("%d ", arr2[i]); } return 0; }
这里我将arr1中的数据复制到了arr2中,然后将arr1的数据进行了后移
四、memset(内存设置)
memset的函数的作用是将指定内存大小的内存块中的值设置为想要的值
void * memset ( void * pt编程客栈r, int value, size_t num );
下面我们来举例一些例子
#include <stdio.h> #include <string.h> int main() { char arr1[] = "HelloWorld!"; printf("%s\n", arr1); memset(arr1, 'X', 5); printf("%s\n", arr1); return 0; }
这里我使用了memset函数将Hello替换成了X
五、memcmp(比较指定字节)
memcmp 逐字节比较两个内存区域的内容,比较的字节数由参数 n 指定。比较从两个内存区域的起始位置开始,依次比较每个字节的值
返回值
- 如果两个内存区域在前 n 字节内完全相同,返回 0。
- 如果第一个不同的字节在 s1 中的值小于 s2 中的值,返回 负整数。
- 如果第一个不同的字节在 s1 中的值大于 s2 中的值,返回 正整数。
int memcmp ( const void * ptr1, const void * ptr2, size_t num );
同样我们举例一下案例
#include <stdio.h> #include <string.h> int main() { char arr1[] = "HelloWorld!"; char arr2[] = "AelloWorld!"; if (memcmp(arr1, arr2, sizeof(arr1)) > 0) { printf("arr1字符串大!\n"); } return 0; }
这里我使用了字符串比较,但并不代表着只能比较字符串,memcmp也可以比较其他类型的数组
使用细节
- 比较的字节数: memcmp 只比较指定的 n 字节。如果两个内存区域在前 n 字节内相同,即使后面的字节不同,memcmp 也会返回 0
- 内存区域的大小: 确保两个内存区域的大小至少为 n 字节,否则可能会导致未定义行为(如访问越界)
- 返回值的含义: www.devze.commemcmp 的返回值是一个整数,表示两个内存区域的比较结果。返回值的具体值(正数或负数)取决于第一个不同的字节的值
六、End
到此这篇关于C语言实现内存函数的示例代码的文章就介绍到这了,更多相关C语言 内存函数内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论