内存拷贝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’。

posted @ 2019-07-04 14:30  朝夕闻道  阅读(760)  评论(0编辑  收藏  举报