memset,memcpy,memmove和memchr

1:memset

原型:void *memset(void *s, int ch, size_t n);

头文件:

功能:按字节将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

其他:1.1:对较大的结构体和数组进行清零操作的一种最快方法 。一般malloc后结合使用,给内存赋值

           1.2:memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节。

2:memcpy

原型:void *memcpy(void *destin, void *source, unsigned n);

头文件:C语言:#include;C++:#include

功能:从源source所指的内存地址的起始位置开始拷贝n个字节到目标destin所指的内存地址的起始位置中。

其他:2.1 source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针。

          2.2 如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

          2.3 source和destin都不一定是数组,任意的可读写的空间均可。

strcpy和memcpy主要有以下3方面的区别。

2.4.1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

2.4.2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。

2.4.3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。

3:memmove

原型:void *memmove( void* dest, const void* src, size_t count );

头文件

功能:由src所指内存区域复制count个字节到dest所指内存区域。

其他:memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

4:memchr

原型:void *memchr(const void *buf, int ch, size_t count);

头文件:#include

功能:从buf所指内存区域的前count个字节查找字符ch。

其他:当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。

你可能感兴趣的:(代码细节)