模拟实现内存操作函数memcpy、memmove
来源:互联网 发布:php 输出错误信息 编辑:程序博客网 时间:2024/06/05 20:45
1、模拟实现memcpy
memcpy是内存拷贝函数,功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
函数原型为:void *memcpy(void *dest, const void *src, size_t n);
void *my_memcpy(void *dst, const void *src, size_t count){ void *ret = dst; while (count--){ *(char *)dst = *(char *)src; dst = (char *)dst + 1; src = (char *)src + 1; } return ret;}int main(){ char arr1[] = "welcome to word"; char arr2[] = "123456"; printf("%s\n",my_memcpy(arr1, arr2, 3)); system("pause"); return 0;}
2、模拟实现memmove
memmove是一个内存操作函数,不是字符串操作函数,它可以处理多种类型的数据。用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
函数原型:void memmove( void dest, const void* src, size_t count );
//1、它的返回值是void*,参数类型也是void*,这样它才可以处理不同类型的数据。//2、目标dest不能加const,源src加const。原因是我们需要从源src中拷贝数据到dest中,需要对dest进行赋值。若用const保护 //dest,便不能完成赋值操作。#include<stdio.h>#include<assert.h>void *my_memmove(void *dest, const void *src, size_t count){ void *ret = dest; if (dest <= src || (char *)dest >= ((char *)src + count)) { while (count--) { *(char *)dest = *(char *)src; dest = (char *)dest + 1; src = (char *)src + 1; } } else { dest = (char *)dest + count - 1; src = (char *)src + count - 1; while (count--) { *(char *)dest = *(char *)src; dest = (char *)dest - 1; src = (char *)src - 1; } } return ret;}int main(){ char arr1[] = "abcd1234"; char arr2[] = "hello word"; printf("%s\n", my_memmove(arr1, arr2, 5)); system("pause"); return 0;}
阅读全文
0 0
- 模拟实现内存操作函数memcpy、memmove
- 模拟实现memcpy memmove 函数
- 模拟实现 memcpy memmove 函数
- 内存操作函数memcpy、memmove
- 模拟实现字符串操作函数(strcpy,strstr,strcat,strcmp,strlen)与内存操作函数(memcpy,memmove)
- 动态内存管理:模拟实现memcpy,memmove
- C语言模拟实现memcpy,memmove函数
- 模拟实现memcpy和memmove函数
- 【c语言】模拟实现memcpy()、memmove()函数
- 模拟实现memset,memcpy,memmove函数
- 模拟实现memcpy和memmove函数
- 内存操作函数memmove,memcpy,memset
- 内存操作函数memcpy和memmove
- c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
- memcpy函数和memmove函数的模拟实现与区别
- memmove函数与memcpy函数的模拟实现
- 模拟实现memcpy/memmove/memset
- 模拟实现memcpy,memmove,memset
- 从数据结构角度分析foreach效率比for循环高的原因
- C语言中 常量和变量
- Java之美[从菜鸟到高手演变]之HashMap、HashTable
- web前端js面试题及参考答案
- Module build failed: ParseError: expected "indent", got "!"
- 模拟实现内存操作函数memcpy、memmove
- 关于快排
- 53道Java线程面试题
- 81. Search in Rotated Sorted Array II
- 解决Linux终端下文件名或标准输出乱码
- Web动态服务器
- vector的初始化
- firewalld关于zone的操作
- 69道Spring面试题和答案