总览
memcpy
memmove
memcmp
memset
1.[memcpy](memcpy - C++ Reference (cplusplus.com))
现在我们有int arr1[]和int arr2[],打算将arr1[]的前5个元素传到arr2中,怎么做?
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9 };
int arr2[10] = { 0 };
return 0;
}
memcpy(arr2, arr1, 20);
该函数的模拟实现
void* my_memcpy(void* dest, const void* source, size_t num)
{
assert(dest && source);
char* ret = dest;
while (num--)
{
*(char*)dest = *(char*)source;
dest = (char*)dest + 1;
source = (char*)source + 1;
}
return ret;
}
2.memmove
问题
如果使用我们的my_memcpy实现my_memcpy(arr+2, arr, 20);
即将1,2,3,4,5,6,7,8,9变为1,2,1,2,3,4,5,8,9
但结果却是
##分析
解决
//使用memmove,确实如此,得到了1,2,1,2,3,4,5,8,9
memmove(arr1+2, arr1, 20);
memove的实现
void* my_memmove(void* dest, void* source, size_t num)
{
assert(dest && source);
char* ret = dest;
if (dest < source) // 前->后
{
*(char*)dest = *(char*)source;
dest = (char*)dest + 1;
source = (char*)source + 1;
}
else // 后->前
{
while (num--)
{
*((char*)dest + num) = *((char*)source + num);
}
}
return ret;
}
3.[memcmp](memcmp - C++ Reference (cplusplus.com))
按字节比较大小
#4.[memset](memset - C++ Reference (cplusplus.com))
把ptr指向的num个字节的内容换成value的值
int main()
{
char str[] = "almost every programmer should know memset!";
memset(str, '-', 6);
puts(str);
return 0;
}