2020-06-13

内存操作字符

1.memcpy
在这里插入图片描述mencpy函数:一内存为单位,把后者拷给前者,拷贝num个字符。拷贝与类型无关(void*)。
此处将tom拷贝给tom_cop。
2.memmove
在这里插入图片描述
在vs2013环境下,上述函数的调用均能实现,
memmove与memcpy相差不大,但memmove能解决内存重叠问题。

☞那么何为重叠问题?
当我们自己编写实现memmove函数时,到调用my_memmove(str+1,str,len)将会发生下述情况,内存重叠,输出全为a。
在这里插入图片描述

☞如何解决这一问题?
这就需要我们根据不同的情况,进行判断,判断是从左向右拷贝还是从右向左拷贝。
对于my_memmove(str+1,str,len)这一情况进行分析:
经分析,只有以下情况需要我们考虑从右到左进行拷贝。
在这里插入图片描述
对于下列完整的模拟实现memmove的代码,分从左到右与从右到左两种情况。
在这里插入图片描述在这里插入图片描述
3.memcmp
在这里插入图片描述
这里是将两个字符串进行比较,比较str与str1开始的第5个字符,返回值类型str>str1时返回1,str<str1时返回-1,等于时返回0,与字符串比较相似。
在这里插入图片描述
对str1,str2进行比较,从第三个字符开始不同,而g的ASSIC码值大于G,所以返回值n=1,输出第一个语句。
4.memset
在这里插入图片描述
对于memset(a,0,sizeof(a)),讲数组a中每个字节全初始化为0,输出的数组为全零;对于memset(a,1,sizeof(a)),对于整形数组的每四个字节,均初始化为01 01 01 01,所以最终输出的值不为1。
对于内存操作字符,要注意均是在内存上进行操作,考虑的是字节,而不是字符。
对于写博客,会加深我们对相关知识点的理解与整理,养成习惯,打好基础,坚持就会胜利✌️✌️

猜你喜欢

转载自blog.csdn.net/m0_46657493/article/details/106736046
今日推荐