网站被黑客攻击怎么办,长春微信网站建设,网站建设公司推荐理由,建网站制作文章目录 1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 1. memcpy使用和模拟实现
返回类型和参数#xff1a;
void * memcpy ( void * destination, const void * source, size_t num );1.函数memcpy从source的位置开始向后复制… 文章目录 1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 1. memcpy使用和模拟实现
返回类型和参数
void * memcpy ( void * destination, const void * source, size_t num );1.函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 2.这个函数在遇到 ‘\0’ 的时候并不会停下来。 3. 如果source和destination有任何的重叠复制的结果都是未定义的。 4.注意单位是字节 5.头文件#includestring.h memcpy使用
int main() {int arr[20] { 0 };//目标数组int arr1[] { 1,2,3,4,5 };//源数组memcpy(arr, arr1, 20);//20单位是字节for (int i 0; i 5; i) {//拷贝完打印printf(%d , arr[i]);}return 0;
}运行结果
memcpy模拟实现 1.我们创建一个返回类型和参数于memcpy函数相同的函数 2.因为memcpy函数拷贝的单位是字节所以我们在拷贝是将类型转化为char*类型 3.通过循环来拷贝 代码实现
void* mn_memcpy(void* p1, const void* p2, size_t n) {assert(p1);//判断是否为空指针参数和类型memcpy一样assert(p2);while (n) {//控制拷贝多少个字节*((char*)p1) *((char*)p2);//将void*转化为char*一字节((char*)p1); ((char*)p2);n--;//}
}
int main() {int arr[20] { 0 };int arr1[] { 1,2,3,4,5 };mn_memcpy(arr, arr1, 20);for (int i 0; i 5; i) {//拷贝完打印printf(%d , arr[i]);}return 0;
}运行结果
2. memmove使用和模拟实现
返回类型和参数
void * memmove ( void * destination, const void * source, size_t num );1.和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。 2. 如果源空间和⽬标空间出现重叠就得使⽤memmove函数处理。 3. 单位是字节 4. 头文件#includestring.h memmove 使用 int main() {int arr1[] { 1,2,3,4,5 };memmove(arr11, arr1, 3*sizeof(int));for (int i 0; i 5; i) {//拷贝完打印printf(%d , arr1[i]);}return 0;
}运行结果 memmove模拟 1.我们创建一个返回类型和参数于memmove函数相同的函数 2.因为memmove函数拷贝的单位是字节所以我们在拷贝是将类型转化为char*类型 3.我们要分三种情况考虑再通过循环拷贝 三种情况
代码实现
void* mn_memmove(void* p1, const void* p2, size_t n) {assert(p1);//判断是否为NULLassert(p2);if (p1 p2 || (char*)p1 (char*)p2 n)//包含两种情况直接按顺序拷贝{while (n) {*((char*)p1) *((char*)p2);//将void*转化为char*一字节((char*)p1); //(char*)p1加加字节加一((char*)p2);n--;}}else {//第三种情况 倒序拷贝p1 (char*)p1 n - 1;p2 (char*)p2 n - 1;while (n) {*((char*)p1) *((char*)p2);((char*)p1)--;((char*)p2)--;n--;}}
}
int main() {int arr1[] { 1,2,3,4,5,6,7,8,9,0 };mn_memmove(arr11, arr1, 3*sizeof(int));for (int i 0; i 10; i) {//拷贝完打印printf(%d , arr1[i]);}return 0;}运行结果
3. memset函数的使用
返回类型和参数
void * memset ( void * ptr, int value, size_t num );1.memset是⽤来设置内存的将内存中的值以字节为单位设置成想要的内容。 2. 头文件#includestring.h 使用
int main() {char arr[] qwert;memset(arr, 0, 3 * sizeof(char));printf(%s, arr);return 0;
}运行结果
4. memcmp函数的使用
返回类型和参数
int memcmp ( const void * ptr1, const void * ptr2, size_t num );1.比较从ptr1和ptr2指针指向的位置开始向后的num个字节 2. 头文件#includestring.h 返回值 使用
int main() {char arr[] qwert;char arr1[] abcdf;if (memcmp(arr, arr1))printf(arrarr1);elseprintf(arr1arr);return 0;
}运行结果
以上就是我的分享了如果有什么错误欢迎在评论区留言。 最后谢谢大家的观看