1

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

4

1 回答 1

3

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

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

于 2017-06-26T19:22:01.073 回答