我想知道我是否能够安全地将这里定义的strcpy_s替换为https://msdn.microsoft.com/en-us/library/td1esda9.aspx (有两个参数的一个),在这里定义了http://en.cppreference.com/w/c/string/byte/strcpy -(第一个)。如果不是,那么我可以使用的最接近的strcpy版本来替换strcpy_s吗?
发布于 2017-06-26 19:22:01
C11标准增加了包括strcpy_s()在内的边界检查函数。因此,如果您担心可移植性,只要您有一个与C11兼容的编译器,就可以了。请注意,C11标准的“约束处理程序”与Microsoft CRT的“无效参数处理程序”略有不同,因此如果您正在安装自定义处理程序,它可能需要进行一些调整。
至于完全替换它,不行,您不能安全地用strcpy()替换它,原因应该很明显:strcpy()是无边界检查的。您需要使用strlen()进行自己的边界检查,或者使用strncpy()、,但请注意的行为不同(特别是,如果源字符串太大,无法在目标中匹配,目标缓冲区将不会以空结尾)。
https://stackoverflow.com/questions/44766913
复制相似问题