C/C++库函数之——str类和mem篇(常用速学)(上)https://developer.aliyun.com/article/1454339
二,mem类函数
1)memcpy
用途:类似strcpy,但是可以复制所有类型的数组
用法:有三个参数,一个是目的地字符串地址,第二个是源头字符串地址,第三个是复制字节大小,返回值仍然是第一个字符串地址
原理:强转为char*,这样就可以以字节为单位复制,之所以以字节为单位,原因很简单,可以自己思考。
自编源码:
void* My_memcpy(void* dest, void* src, int sz) { void* temp = dest; while (sz--) { *((char*)dest)++ = *((char*)src)++; } return temp; }
2)memmove
用途:可以将一个数组中的内容移动到另一个数组,不改变原来数组。
用法:三个参数,第一个是一个是目的地字符串地址,第二个是源头字符串地址,第三个是复制字节大小,返回值仍然是第一个字符串地址
自编源码:(其中有很多玄妙,下面解说)
void* My_memmove(void* dest, void* src, int sz) { void* temp = dest; if (dest > src) { while (sz) { *((char*)dest+sz-1) = *((char*)src+sz-1); sz--; } } else { int i = 0; while (i < sz) { *((char*)dest+i) = *((char*)src+i); i++; } } return dest; }
如果移动的是通一个数组,那么可能会一边改变数组,一边复制,可能会出错,因此我们要分类,如果目的地地址在源头地址之后的话,我们就要从后往前拷贝
反之则从前往后拷贝