我想知道我是否可以安全地替换此处定义的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 最接近的版本是什么?
答案 0 :(得分:3)
C11标准添加了bounds-checked functions,包括strcpy_s()
。因此,如果您担心可移植性,只要您拥有符合C11标准的编译器就可以了。请注意,C11标准的“约束处理程序”与Microsoft CRT的“无效参数处理程序”略有不同,因此如果您要安装自定义处理程序,则可能需要进行一些调整。
至于完全替换它,不,你不能用strcpy()
安全地替换它,原因应该是显而易见的:strcpy()
未经过边界检查。您可能需要使用strlen()
进行自己的边界检查,或使用strncpy()
,,但请注意strncpy()
行为不同(具体而言,如果源字符串为太大而不适合目的地,目标缓冲区不会以空值终止。)