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

转载于:https://www.cnblogs.com/zxwdnj/p/11132249.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值