1。
模拟实现memcpy (内存拷贝)(拷贝字符串时不会自动加’’)
注:memcpy拷贝时没有考虑到内存交叉
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
#include <string.h>
#include <assert.h>
void *my_memcpy ( void *det ,const char *src ,size_t count)
{
void *ret = det;
assert(det);
assert(src);
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det + 1;
src = (char*)src + 1;
}
return ret;
}
int main()
{
char str[]="1234abc886";
char arr[20];
char *ps = NULL;
char *pp = NULL;
ps = my_memcpy(arr,str,strlen(str)+1);
pp = memcpy(arr,str,strlen(str)+1);
printf("my_memcpy :%sn",pp);
printf("memcpy :%sn",ps);
return 0;
}
2。
模拟实现memmove (内存拷贝)
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <assert.h>
void *my_memmove ( void *det ,const char *src ,size_t count)
{
void *ret = det;
assert(det);
assert(src);
if(det <= src || ((char*)det) >= ((char*)src + count))
{
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det + 1;
src = (char*)src + 1;
}
}
else
{
det = (char*)det + count - 1;
src = (char*)src + count - 1;
while(count--)
{
*(char *)det = *(char*)src ;
det = (char*)det - 1;
src = (char*)src - 1;
}
}
return ret;
}
int main()
{
char str[]="1234abc886";
char arr[20] = " ";
char *pp = NULL;
*arr = str + 4;
pp = my_memmove(arr,str,7);
printf("my_memmove :%sn",pp);
return 0;
}
最后
以上就是单身诺言最近收集整理的关于模拟实现memcpy,memmove的全部内容,更多相关模拟实现memcpy内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复