strcpy, strcpy_s, strncpy, strncpy_s整合

♀尐吖头ヾ 提交于 2019-12-12 03:17:18

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,方便移植,降低平台依赖

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!