strcpy、strcpy_s、strncpy、strncpy_s

strcpy函数语法

/*
*描述:此类函数是用于对字符串进行复制(拷贝)。
*
*参数:
*   [in] strSource:需要拷贝的字符串
*   [out] strDestination:拷贝完成之后的字符串
*
*返回值:指向 strDestination 这个字符串的指针
*/
char* strcpy(char* strDestination, const char* strSource);

strcpy_s函数语法

/*
*描述:此类函数是用于对字符串进行复制(拷贝)。
*
*参数:
*   [out] strDestination:拷贝完成之后的字符串
*   [in] numberOfElements: strDestination目标缓冲区长度
*   [in] strSource:需要拷贝的字符串
*
*返回值:返回一个整数,0表示复制成功,返回非0值代表复制不成功,不同的值表示不同的错误,具体内容可以查阅MSDN手册
*/
errno_t strcpy_s(char *strDestination , size_t numberOfElements , const char *strSource);

strncpy 函数语法

/*
描述:
将指定长度的字符串复制到字符数组中,

复制字符串source中的内容(字符,数字、汉字....)到字符串destinin中,复制多少由size_t n的值决定。
如果source的前n个字符不含NULL字符,则结果不会以NULL字符结束。如果n<source的长度,
只是将source的前n个字符复制到destinin的前n个字符,不自动添加'\0',
也就是结果destinin不包括'\0',需要再手动添加一个'\0'。
如果source的长度小于n个字节,则以NULL填充destinin直到复制完n个字节。
source和destinin所指内存区域不可以重叠且destinin必须有足够的空间来容纳source的字符长度+'\0'。

如果要复制的*source的部分有\0,就把\0复制进去,之后就提前结束,即使没复制到第size_t n个字符也是

参数:
[out] destinin:表示复制的目标字符数组;
[in] source:表示复制的源字符数组;
[in] n:表示复制的字符串长度

返回: destinin
*/
char *strncpy(char *destinin, char *source, size_t n);

strncpy_s  函数语法:

/*
描述:
将由src指向的字符数组的大部分计数字符(包括终止空字符,但不包括空字符后面的任何字符)
复制到由dest指向的字符数组。
参数:
dest 指向要复制到的字符数组的指针

SRC  指向要复制的字符数组的指针

count 最大数量的字符复制

destsz 目标缓冲区的大小

返回值:
在成功时返回零,错误时返回非零值

*/


errno_t strncpy_s(char * restrict dest,rsize_t destsz,
const char * restrict src,rsize_t count);

strcpy和strcpy_s 在拷贝的时候遇到"\0", 就自动结束了,后面加“_s”表示,安全模式

strncpy能够选择一段字符输出,strcpy则不能

memcpy 函数 / memcpy_s 函数拷贝过程中就算遇到'\0'结束符也不会结束;

strncpy 的标准用法为:(手工写上 \0)

strncpy(path, src, sizeof(path) - 1);
path[sizeof(path) - 1] = '\0';
len = strlen(path);

这几个strcpy的变形,在指定大小的时候,都要留一个位置给\0,所以拷贝的大小永远都是size-1

番外:

Linux 版本有 strlcpy,但 Windows 下是没有 strlcpy 的,对应的是strcpy_s函数 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值