实际的区别是_s函数在写入目标缓冲区之前检查它。如果缓冲区太小,则程序将中止,或报告错误值,这取决于当前错误处理程序。
这可以防止缓冲区溢出攻击,当恶意数据以某种特定的方式形成以覆盖其他数据并获得对程序的控制时。
当然,只有在正确传递目标缓冲区的大小时,预防才能起作用。如果没有,缓冲区溢出和攻击仍然是可能的。
即使应用程序没有安全含义,无论如何使用_s函数也是有用的,以避免很难找到内存损坏的bug。
Visual C++提供了模板化的_tcscpy_s版本,因此用于数组而不是
代码语言:javascript运行复制_tcscpy_s(destination_array,_countof(destination_array),Source);您可以使用
代码语言:javascript运行复制_tcscpy_s(destination_array,Source);这是更安全的,因为大小是推断,所以不正确的大小是不可能的。