我是靠谱客的博主 稳重白羊,这篇文章主要介绍C语言 memset、memcpy、memmove函数的思想及实现一、memset:内存初始化函数二、memcpy:内存拷贝函数三、memmove函数的实现,现在分享给大家,希望可以做个参考。

目录

一、memset:内存初始化函数

二、memcpy:内存拷贝函数

三、memmove函数的实现


一、memset:内存初始化函数

  void *memset(void *dest, int c, size_t count);

dest :  一块空间的起始地址

c: 对这块空间中每个字节要初始化的数据

count: 从dest起始地址开始,要设置多少字节的空间

返回值: 返回dest空间首地址

代码思路:

这个函数的实现很简单,根据开始时所输入的数据类型,在dest之前将他强转为相应所需要的类型,简单的for循环即可

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> void *mymemset(void *dest, int c, size_t count) { for (int i = 0; i < count; i++) { *(((char*)dest + i)) = c; } return dest; } int main() { char string[] = "A stingtof,,tokensnand some more tokend"; mymemset(string, 0, sizeof(string)); system("pause"); return 0; }

 

 调试结果由上图可知,进过mymemset函数,将字符串的内存改为0

二、memcpy:内存拷贝函数

 void *memcpy(void *dest, const void *src, size_t count);

功能:从src指向的空间中拷贝count字节的数据到dest空间中

dest :目标空间

src:源数据空间

count:大小

返回值:返回dest空间首地址 

如果在复制中,源与目标重叠,此函数无法保证在覆盖之前复制重叠区域中的原始字节,要使用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
void *mymemcpy(void *dest, const void *src, size_t count) { assert(dest != NULL && src != NULL); char *d = (char*)dest; char *e = (char*)src; while (count--) { *d = *e; d++; e++; } return dest; } int main() { char string[] = "A stingtof,,tokensnand some more tokend"; char buff[1024] = { 0 }; mymemcpy(buff, string, sizeof(string)); system("pause"); return 0; }

buff内存空间均为0

 

运行mymemcpy函数,成功将string拷贝进来,为了加以区别,我们在string中加入

当strcpy函数遇到时,会停止,而我们这个函数不受的影响,从上面内存也可以看出,00之后继续拷贝  

三、memmove函数的实现

void * memmove ( void * dst, const void * src, size_t count);
如果在复制中,源与目标重叠,要在覆盖之前复制重叠区域中的原始字节,要使用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
void *mymemmove(void * dest, const void * src, size_t count) { assert(dest != NULL && src != NULL); char *d = (char*)dest; char *s = (char*)src; if ((d > s) && ((s + count) > d)) { d = d + count - 1; s = s + count - 1; while (count > 0) { *(s) = *(d); d--; s--; count--; } } else { while (count > 0) { *d = *s; d++; s++; count--; } } return dest; } int main() { char string[] = "A stingtof,,tokensnand some more tokend"; mymemmove(string + 5, string, sizeof(string)); printf("%sn", string); system("pause"); return 0; }

最后

以上就是稳重白羊最近收集整理的关于C语言 memset、memcpy、memmove函数的思想及实现一、memset:内存初始化函数二、memcpy:内存拷贝函数三、memmove函数的实现的全部内容,更多相关C语言内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部