部分函数总结

来源:互联网 发布:mac强制关掉进程 编辑:程序博客网 时间:2024/06/16 00:25

ZeroMemory

声明:void ZeroMemory( PVOIDDestination,SIZE_T Length );

参数:Destination :指向一块准备用0来填充的内存区域的开始地址。

      Length :准备用0来填充的内存区域的大小,按字节来计算。

返回值:

作用:ZeroMemory只是将指定的内存块清零。(美国微软公司的软件开发包SDK中的一个宏。 其作用是用0来填充一块内存区域。ZeroMemory只能用于Windows系统,而memset还可用于其他系统)


memset():

别称:初始化函数

头文件:<memory.h>或<string.h>

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

返回值:无返回

功能:将s中当前位置后面的n个字节(typedef unsigned int size_t )用ch替换并返回s。即是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法


memcpy():

头文件:C语言:<string.h>  / C++:<cstring>

原型:void *memcpy(void *dest, const void *src, size_t n);

返回值:函数返回指向dest的指针。

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

说明:1.source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针.
2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。

strcpy():

头文件:string.h

原型:char *strcpy(char* dest, const char *src);

返回值:返回指向dest的指针

功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。(strcpy成功后自动加结束符)

strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy


strncpy():

头文件:string.h

原型:char *strncpy(char *dest,char *src,size_t n);

返回值:返回dest的指针

功能:(c/c++)复制字符串src中的内容(字符,数字、汉字....)到字符串dest中,复制多少由size_tn的值决定

说明:如果src的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<src的长度,只是将src的前n个字符复制到dest的前n个字符,不自动添加'\0',也就是结果dest不包括'\0',需要再手动添加一个'\0'。如果src的长度小于n个字节,则以NULL填充dest直到复制完n个字节。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符长度+'\0'。(strncpy成功后不自动加'\n')

strncpy与strcpy:

strcpy只是复制字符串,但不限制复制的数量,很容易造成缓冲溢出。strncpy要安全一些。
strncpy能够选择一段字符输出,strcpy则不能


memmove():

头文件:<string.h>

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

返回值:无返回

共能:用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。

说明:当目标区域与源区域没有重叠则和memcpy函数功能相同




0 0