memcpy、strcpy、strncpy、strncpy_s拷贝函数总结

memcpy()函数

函数原型
void *memcpy(void *dest,const void *src,size_t n);
功能
由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。
头文件
#include <string.h>
说明

  1. src和dest所指内存区域不能重叠,函数返回指向dest的指针。
  2. 与strcpy相比,memcpy并不是遇到’\0’就结束,而是一定会拷贝完n个字节。
  3. 如果目标数组dest本身已经有数据了,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址追加到你要追加数据的地址。
    注意:src和dest都不一定是数组,任意的可读写的空间均可。

strcpy()函数

原型
char *strcpy(char *dest,const char src);
功能
strcpy是一种C语言的标准库函数,strcpy把含有’\0’结束符的字符串复制到另一个地址空间,返回值为char

头文件
#include <string.h>
#include <stdio.h>
说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
注意:sizeof(指针),sizeof(数组)的区别。

strncpy()函数

函数原型
char *strncpy(char *desc,const char *src,size_t n);
功能
函数strncpy从src指向地址为起始地址的空间中复制n个字符(不复制空字符后面的字符)到以desc指向的地址为起始地址的空间中。如果未抵达n而src结束,则写入额外的空字符到dest,直至写入总共count个字符。
函数strncpy_s
strncpy_s(char *restrict dest,rsize_t destlen,const char *restrict src,rsize_t count);

注意事项

  1. strcpy是依据’\0’作为结束判断的,如果dest的空间不够,则会引起buffer overflow。
  2. memcpy用来在内存中复制数据,由于字符串是以’\0’结尾的,所以对于在数据中包含’\0’的数据只能用memcpy。
  3. strncpy和memcpy很相似,只不过他在一个终止的空字符处停止。当n>strlen(src)时,给dest不够数的空间里填充终止字符,但也不是’\0’,是’?’(在visual studio中);当n<=strlen(src)时,dest是没有结束符’\0’的(经过测试,无论复制多少个当n<dest的空间长度时都会自动分配’\0’,当等于时没有’\0’,大于时报错;而memcpy基本一样,不过memcpy当n大于dest的长度时不会报错,在visual studio中有绿线警告提示)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值