内存拷贝mencpy、内存比较mencmp、内存拷贝memmove、内存赋值memset、字符串拷贝strcpy、字符串比较strcmp、字符串拷贝strncpy
1.Memcpy
函数原型 void *memcpy(void *destin, void *source, unsigned n);
参数
-
destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
-
source-- 指向要复制的数据源,类型强制转换为 void* 指针。
-
n-- 要被复制的字节数。
所需头文件
C语言:#include<string.h>
C++:#include<cstring>
应用说明
1.source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针。
2.如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。
2.memmove
作用:
memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
原型
:void *memmove( void* dest, const void* src, size_t count );所需头文件
:<string.h>3.memset
作用:
将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
原型
:void *memset(void *s, int ch, size_t n);buffer:为指针或是数组,
ch:是赋给buffer的值,(0-255)
count:是buffer的长度.
[总结]:3种mem操作方式,都有明确指出操作的字节数数量;
4.memcmp
5.strcpy
作用:
把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。
原型
:char *strcpy(char* dest, const char *src);所需头文件
:#include <string.h> 和 #include <stdio.h>说明:
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
6.strcmp
作用:
strcmp函数用于比较两个字符串并根据比较结果返回整数。两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。
基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
原型
:char *strcpy(char* dest, const char *src);所需头文件
:#include <string.h> 和 #include <stdio.h>说明:
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
【总结】:对于字符串的操作,依赖于结束标记‘\0’,而不是明确数量。
7.strncpy
作用:
将指定长度的字符串复制到字符数组中。
原型
:char *strncpy(char *destinin, char *source, int maxlen);所需头文件
:destinin:表示复制的目标字符数组;source:表示复制的源字符数组;
maxlen:表示复制的字符串长度。
说明:
复制字符串source中的内容(字符,数字、汉字....)到字符串destinin中,复制多少由maxlen的值决定。
如果source的前n个字符不含NULL字符,则结果不会以NULL字符结束。
如果n<source的长度,只是将source的前n个字符复制到destinin的前n个字符,不自动添加'\0',也就是结果destinin不包括'\0',需要再手动添加一个'\0'。
如果source的长度小于n个字节,则以NULL填充destinin直到复制完n个字节。
source和destinin所指内存区域不可以重叠且destinin必须有足够的空间来容纳source的字符长度+'\0'。
【总结】:strcpy容易造成目的地址内存溢出;strncpy容易maxlen上设置出问题,导致目的地址结束没有结束标记‘\0’。