c++ - strcpy 是否等同于 strcpy_s

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

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

最佳答案

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

至于完全替换它,不,你不能安全地用 strcpy() 替换它,原因应该很明显:strcpy() 不是边界-检查。您要么需要使用 strlen() 进行自己的边界检查,要么使用 strncpy()但请注意 strncpy() 行为不同(具体来说,如果源字符串太大而不适合目标,目标缓冲区将不会以 null 结尾)。

关于c++ - strcpy 是否等同于 strcpy_s,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44766913/

相关文章:

c++ - constexpr(gcc) 错误 - 错误 : a brace-enclosed initializer is not allowed here before '{' token

c++ - const char& 作为函数的参数

c++ - 如何覆盖 boost::serialize 获取指向对象的指针时发生的情况

c++ - 错误的函数调用 "IOCTL_DISK_GET_DRIVE_LAYOUT_EX"

c++ - 如何编写适用于两个动态数组的 strcat 函数

c++ - 调用 const 函数而不是其非常量版本

c - 使用哪个 IP Helper API 接口(interface)?

c# - waitany(Array) 实际上 'set' 是一个事件,还是只是返回有信号事件的索引

计算字符串中字符出现次数时的 C++ 段错误

c - 如何在 C 循环中使用不同的临时字符串?