网站导入,网站推荐你了解我意思吧,wordpress the_,wordpress最好插件目录
1.memcpy的使用和模拟实现
2.memmove使用和模拟实现
3.memset函数的使用
4.memcmp函数的使用 内存函数在string.h库中#xff0c;我们使用内存函数必须先引入string.h头文件
1.memcpy的使用和模拟实现
memcpy的函数原型如下#xff1a;
void * m…目录
1.memcpy的使用和模拟实现
2.memmove使用和模拟实现
3.memset函数的使用
4.memcmp函数的使用 内存函数在string.h库中我们使用内存函数必须先引入string.h头文件
1.memcpy的使用和模拟实现
memcpy的函数原型如下
void * memcpy ( void * destination, const void * source, size_t num ); 1.函数memcpy会从source的位置开始向后复制num个字节到destination中。 2.这个函数在遇到’\0‘时并不会停下来 3.如果两块内存有重叠的话复制的结果是未定义的。 我们先来使用以下这个函数看看效果。
#include stdio.h
#include string.h
int main()
{int arr1[] { 1,2,3,4,5,6,7,8,9,10 };int arr2[10] { 0 };int arr3[10] { 0 };int arr4[10] { 0 };int i 0;memcpy(arr2, arr1, 8);for (i 0; i 10; i){printf(%d , arr2[i]);}printf(\n);memcpy(arr3, arr1, 10);for (i 0; i 10; i){printf(%d , arr3[i]);}printf(\n);memcpy(arr4, arr1, 20);for (i 0; i 10; i){printf(%d , arr4[i]);}printf(\n);return 0;
}
运行结果 1 2 0 0 0 0 0 0 0 0 1 2 3 0 0 0 0 0 0 0 1 2 3 4 5 0 0 0 0 0 大家一定要注意这里操作的是字节而一个字节是八个比特位。
现在我们来模拟实现一下这个函数
void* memcpy(void* dst, const void* src, size_t count)
{assert(src);assert(dst);void* ret dst;while (count--){*(char*)dst *(char*)src;dst (char*)dst 1;src (char*)src 1;}return ret;
}
但是如果两个内存块重叠的话我们使用这个函数就无法完成我们的目的了我给大家展示一下 为了避免出现这样的情况我们就需要使用memmove来进行操作了。
2.memmove使用和模拟实现
memmove和memcpy的差别就是memmove函数处理的源内存块是可以和目标内存块重叠的。
那么我们又应该怎么去复制呢诸君且看图 void* memmove1(void* dst, const void* src, size_t count)
{void* ret dst;//情况2情况3if (dst ret || (char*)dst ((char*)src count)){while (count--){*(char*)dst *(char*)src;dst (char*)dst 1;src (char*)src 1;}}//别的情况都可以从高地址复制到低地址解决问题else{//我们如果不-1就会比count多复制一个字节。dst (char*)dst count - 1;src (char*)src count - 1;while (count--){*(char*)dst *(char*)src;dst (char*)dst - 1;src (char*)src - 1;}}return ret;
} 再画个图帮助大家理解为什么要-1. 3.memset函数的使用
memset函数是用来设置内存的将内存中的值以字节为单位设置成想要的内容。
这个函数的原型如下
void * memset ( void * ptr, int value, size_t num ); ptr是要设置的内存地址 value是要设置的值 num是该值的字节数。 如下图所示 4.memcmp函数的使用
这是一个内存比较函数函数原型如下
int memcmp ( const void * ptr1, const void * ptr2, size_t num ); 比较从ptr1和ptr2指针指向的位置开始向后的num个字节。 比较的原理和返回值可参考这篇博文目录6C语言字符串函数全解