头文件:string.h
一、memcpy()-内存拷贝
解释:将num字节的值从源指向的位置直接复制到目标指向的内存块。为避免溢出,目标和源参数指向的数组的大小至少应为num字节,并且不应重叠(对于重叠的内存块,memmove是一种更安全的方法)。
格式:
void * memcpy ( void * destination, const void * source, size_t num );
实例:
模拟实现:
void* my_memcpy(void* dest,const void* src,size_t num) {
void* ret = dest;
assert(dest && src);
//拷贝字节,一个一个字节的拷贝
while (num--) {
//强制转换为字节
*(char* )dest = *(char*) src;
//或者写成:
// *((char*)dest)++ ;
//*((char*)src)++;
dest = (char*)dest+1;
src = (char*)src + 1;
}
return ret;
}
要点:
1、memcpy函数应该拷贝不重叠的内存
二、memmove()-内存移动
解释:将num字节的值从源指向的位置复制到目标指向的内存块。复制就像使用了中间缓冲区一样进行,允许目标和源重叠。
格式:
void* memmove(void* destination const void source size_t num)
实例:
模拟实现:
void* my_memmove(void* dest,const void* src,size_t num) {
assert(dest && src);
void* ret = dest;
if(dest < src){
//前 -> 后
while (num--) {
(char*)dest = (char*)src;
*((char*)dest)++ = *((char*)src)++;
}
}
else {
//后 -> 前
while (num--) {
*((char*)dest + num) = *((char*)src + num);
}
}
return ret;
}
要点:
1、memmove函数可以处理内存重叠的情况
三、memcmp()-内存比较
解释:将ptr1指向的内存块的前num字节与ptr2指向的前num个字节进行比较,如果它们都匹配则返回零,如果不匹配则返回一个不同于零的值,表示哪个值更大。
注意,与strcmp不同,该函数在找到空字符后不会停止比较。
格式:
void* memcmp(void* destination const void source size_t num)
实例:
要点:
1、memcmp()在不同条件下的返回值与strcmp()一致
四、memset()-内存设置
解释:将ptr指向的内存块的前num个字节设置为指定值(解释为无符号字符)。
格式:void * memset ( void * ptr, int value, size_t num );
实例:
要点:
1、以字节为单位设置内存