上一期我们讲述了一些字符函数,这一期我们讲一些更深层的函数,内存操作函数。
头文件同样是<string.h>。
上一期链接:http://t.csdnimg.cn/jawYi
memcpy
由于传入的指针并不一定是字符了,memcpy的使用范围将比strcpy更为广泛。
需要注意的是,这里的num并不是元素个数,而是字节数,也就是说,如果对一个int数据传了三个字节,可能会减小其大小(而且这里的传入是按照小端存储的方式进行传入)
听起来似乎很厉害。
没错,它的确很厉害,但是安全性却远不如strcpy。
还记得strcpy里有一个必须保证目的地有足够大空间的要求吗?
memcpy无法做到这件事,换句话说,memcpy完全听你的,你说传多少个字节,我们就传多少个,根本不管对面能不能接受,硬撑也要让对面开辟出空间吃下,而且不会复制\0。
这也是内存操作函数比较麻烦的通病,很霸道。
memmove
memmove是memcpy的升级版,可以对空间上有重叠的两个字符串进行复制粘贴。
在模拟实现中,我们唯一需要注意的点是复制的方向。
如果是12345。
我从第一个字符开始粘贴到第三个字符。
很容易发现当复制第三个字符的时候,复制的是1而不是3,这个时候就需要反向复制,避免复制到重复字符。
memset
memset用于设置指定目的地、指定字节的内容。
memcmp
和strcmp类似,memcmp进行一个字节一个字节的比较。
内存操作函数还是建议自己实操感悟,类似于之前的字符串函数。