功能:内存拷贝函数 代码:
void* my_memcpy(void* dest, void* src, size_t n) { void* ret = dest; char* str1 = (char*)dest; char* str2 = (char*)src; assert(dest); assert(src); while (n--) { *str1++ = *str2++; } return ret; }功能:当内存拷贝出现位置冲突时,可使用memove. 代码:
void* my_memmove(void* dest, void* src, size_t n) { void* ret = dest; char* str1 = (char*)dest; char* str2 = (char*)src; assert(dest); assert(src); if (str1 > str2) { while (n--) { *(str1 + n) = *(str2 + n); } } else { while (n--) { *str1++ = *str2++; } } return ret; }测试:
int main() { int i = 0; int arr1[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int arr2[10] = { 0 }; int arr3[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; my_memcpy(arr2, arr1, sizeof(arr1)); my_memmove(arr3 + 5, arr3 + 4, 3 * sizeof(int)); for (i = 0; i < 10; i++) { printf("%d ", arr2[i]); } printf("\n"); for (i = 0; i < 10; i++) { printf("%d ", arr3[i]); } system("pause"); return 0; }功能:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。 代码:
void * my_memset(void* src, int ch, size_t count) { assert(src != NULL); void* start = src; while (count--) { *(char*)src = (char)ch; src = (char*)src + 1; } return start; }测试:
int main() { char arr[] = "abcdef"; char* ret = my_memset(arr, '*', 3); printf("%s\n", ret); system("pause"); return 0; }