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函数