网站服务器的安全性首先是实现用户账号的权限设置,抚州建设公司网站,电子政务网站建设出版社,无货源网店现在还挣钱吗本章对 memcpy#xff0c;memmove#xff0c;memcmp 三个函数进行详解和模拟实现#xff1b;
本章重点#xff1a;3个常见内存函数的使用方法及注意事项并学会模拟实现#xff1b;
如果您觉得文章不错#xff0c;期待你的一键三连哦#xff0c;你的鼓励是我创作的动力… 本章对 memcpymemmovememcmp 三个函数进行详解和模拟实现
本章重点3个常见内存函数的使用方法及注意事项并学会模拟实现
如果您觉得文章不错期待你的一键三连哦你的鼓励是我创作的动力之源让我们一起加油一起奔跑让我们顶峰相见 1.memcpy函数内存拷贝函数 函数介绍 1.memcpy函数的作用从source的位置开始向后复制num个字节的数据到destination的内存位置。 可以拷贝字符数组整型数组结构体等等所以参数是void* 的指针 2.这个函数在遇到 \0 的时候并不会停下来。注意 3.memcpy函数的局限如果source和destination有任何的重叠复制的结果都是未定义的。 memcpy函数拷贝不重叠的内存的拷贝。 4.拷贝结束返回目标空间的起始地址。 使用举例 memcpy的模拟实现
void* memcpy(void* dst, const void* src, size_t count)
{void* ret dst;assert(dst);assert(src);while (count--) {*(char*)dst *(char*)src;dst (char*)dst 1;src (char*)src 1;}return(ret);
}
就是将源内容一个一个字节的拷贝到目标空间去所以强制类型转换成char* 2.memmove函数内存移动函数 函数介绍 memcpy和memmove函数的用法一样作用有所差别
1.memmove函数不仅可以拷贝不重叠的内存而且可以拷贝重叠的内存。 2.和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。 3.如果源空间和目标空间出现重叠就得使用memmove函数处理。 memmove的使用示例 当memmove函数用来拷贝重叠内存 memmove函数的模拟实现
void* memmove(void* dst, const void* src, size_t count)
{void* ret dst;if (dst src || (char*)dst ((char*)src count)){while (count--){*(char*)dst *(char*)src;dst (char*)dst 1;src (char*)src 1;}}else {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);
}
解析
例如将arr[]{12345678910}中的1 2 3 4 5 放到3 4 5 6 7的位置上去如果我们还是用前面memcpy的思想第一步把1放到3上去变为1 2 1 4 5 6 7 8 9 10第二步把2放到4上去变为1 2 1 2 5 6 7 8 9 10第三步我们需要将3放到5上去但是第一步我们已经将3改变了所以这种思想不行
memmove模拟实现思想 3.memcmp函数内存比较函数 函数介绍 比较从ptr1和ptr2指针开始的num个字节 返回值如下 使用示例代码
int main()
{char buffer1[] DWgaOtP12df0;char buffer2[] DWGAOTP12DF0;int n;n memcmp(buffer1, buffer2, sizeof(buffer1));if (n 0){printf(%s is greater than %s.\n, buffer1, buffer2);}else if (n 0){printf(%s is less than %s.\n, buffer1, buffer2);}else{printf(%s is the same as %s.\n, buffer1, buffer2);}return 0;
}
运行结果 本章完~