strcpy, strcpy_s, strncpy, strncpy_s
strcpy用法:
原型声明:char *strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把含有’\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
strcpy_s用法:
该函数是VS2005之后的VS提供的,并非C标准函数
原型:三个參数时:errno_t strcpy_s(char *strDestination, size_t numberOfElements, const char *strSource);
两个參数时:errno_t strcpy_s(char (&strDestination)[size], const char *strSource); // C++ only
功能:同strcpy()函数功能相同,不同之处在于参数中多了个size_t类型的参数,该参数为字符串dst的长度,当存在缓存区溢出的问题时(即src的长度大于dst的长度),strcpy_s()会抛出异常;而strcpy()结果则未定,因为它错误地改变了程序中其他部分的内存的数据,可能不会抛出异常但导致程序数据错误,也可能由于非法内存访问抛出异常。
说明:两个参数时,若dst长度小于src长度时,会出错,并提示。
strncpy用法:
头文件:#include <string.h>
语法:char *strncpy(char *destinin, char *source, int maxlen);
功能:strncpy函数用于将指定长度的字符串复制到字符数组中。
说明:C语言的库函数之一,来自 C语言标准库。如果n<source的长度,只是将source的前n个字符复制到destinin的前n个字符,不自动添加’\0’,也就是结果destinin不包括’\0’,需要再手动添加一个’\0’。如果source的长度小于n个字节,则以NULL填充destinin直到复制完n个字节。source和destinin所指内存区域不可以重叠且destinin必须有足够的空间来容纳source的字符长度+’\0’。
strncpy_s用法:
原型:
四个参数时:errno_t strncpy_s(char *strDest, size_t numberOfElements, const char *strSource, size_t count);
三个參数时:errno_t strncpy_s(char (&strDestination)[size], const char *strSource, size_t count);
说明:
1.参数numberOfElements表明dest中的字节数,防止目标指针dest中的空间不够,同时返回值改成返回错误代码,而不是返回char*。
2.会在字符串结束处填补一个空字符。
3.count参数需要小于目标缓冲区大小。
4.windows的扩展,非C标准函数,linux下可用strncpy进行替换。
5.参数个数不同的情况类比strcpy_s。
尽量使用strcpy和strncpy,方便移植,降低平台依赖
来源:CSDN
作者:ega_t
链接:https://blog.csdn.net/egahhhh/article/details/103492985