C++ strcpy是否等同于strcpy_s

C++ strcpy是否等同于strcpy_s,c++,msdn,c-strings,null-terminated,string.h,C++,Msdn,C Strings,Null Terminated,String.h,我想知道我是否可以安全地将这里定义的strcpy(有两个参数的一个)替换为这里定义的strcpy(第一个)。如果没有,那么我可以用什么最接近的strcpy版本来代替strcpy?添加的C11标准。因此,如果您担心可移植性,那么只要您有一个兼容C11的编译器就可以了。请注意,C11标准的“约束处理程序”与Microsoft CRT的“无效参数处理程序”略有不同,因此如果要安装自定义处理程序,可能需要进行一些调整 至于完全替换它,不,您不能用strcpy()安全地替换它,原因应该很明显:strcpy

我想知道我是否可以安全地将这里定义的strcpy(有两个参数的一个)替换为这里定义的strcpy(第一个)。如果没有,那么我可以用什么最接近的strcpy版本来代替strcpy?

添加的C11标准。因此,如果您担心可移植性,那么只要您有一个兼容C11的编译器就可以了。请注意,C11标准的“约束处理程序”与Microsoft CRT的“无效参数处理程序”略有不同,因此如果要安装自定义处理程序,可能需要进行一些调整

至于完全替换它,不,您不能用
strcpy()
安全地替换它,原因应该很明显:
strcpy()
未被选中。您可能需要使用
strlen()
执行自己的边界检查,或者使用
strncpy()
但请注意
strncpy()
的行为不同(特别是,如果源字符串太大而无法放入目标,则目标缓冲区不会以null结尾).

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


至于完全替换它,不,您不能用
strcpy()
安全地替换它,原因应该很明显:
strcpy()
未被选中。您可能需要使用
strlen()
执行自己的边界检查,或者使用
strncpy()
但请注意
strncpy()
的行为不同(特别是,如果源字符串太大而无法放入目标,则目标缓冲区不会以null结尾).

好的
strcpy\u s
是否包含一个额外的参数,您可以拧紧它,您的目标是什么?你当然可以,但通常不应该用
strcpy
替换
strcpy\u s
,如果你不知道它为什么会出现在那里。你能吗?对你这样做安全吗?好吧,考虑到你正在用一个不太安全的函数替换一个更安全的函数,我会说不。你为什么不使用
std::string
来避免整个问题?它们不是等价的
strcpy_s
设计用于在目标缓冲区被破坏并且随后发生缓冲区溢出时,默认情况下中止进程,因此您可以将其替换回本机标准C
strcpy
?当然这样安全还是更安全?不。好吧,strcpy\u s包含了一个额外的参数,您可以拧紧它。您的目标是什么?你当然可以,但通常不应该用
strcpy
替换
strcpy\u s
,如果你不知道它为什么会出现在那里。你能吗?对你这样做安全吗?好吧,考虑到你正在用一个不太安全的函数替换一个更安全的函数,我会说不。你为什么不使用
std::string
来避免整个问题?它们不是等价的
strcpy_s
设计用于在目标缓冲区被破坏并且随后发生缓冲区溢出时,默认情况下中止进程,因此您可以将其替换回本机标准C
strcpy
?当然这样安全还是更安全?不