strcpy等同于strcpy_s

时间:2017-06-26 19:03:48

标签: c++ msdn c-strings null-terminated string.h

我想知道我是否可以安全地替换此处定义的strcpy_s https://msdn.microsoft.com/en-us/library/td1esda9.aspx - (带有两个参数的strcpy_s) - 这里定义了strcpy http://en.cppreference.com/w/c/string/byte/strcpy - (第一个)。如果没有那么我可以用来替换strcpy_s的 strcpy 最接近的版本是什么?

1 个答案:

答案 0 :(得分:3)

C11标准添加了bounds-checked functions,包括strcpy_s()。因此,如果您担心可移植性,只要您拥有符合C11标准的编译器就可以了。请注意,C11标准的“约束处理程序”与Microsoft CRT的“无效参数处理程序”略有不同,因此如果您要安装自定义处理程序,则可能需要进行一些调整。

至于完全替换它,不,你不能用strcpy()安全地替换它,原因应该是显而易见的:strcpy()未经过边界检查。您可能需要使用strlen()进行自己的边界检查,或使用strncpy(),但请注意strncpy()行为不同(具体而言,如果源字符串为太大而不适合目的地,目标缓冲区不会以空值终止。)