C运行库中的安全字符串函数

安全隐患:目标字符串缓冲区不够大,无法容纳所生成的字符串,就会导致内存中的数据被破坏。

  • strcpy和wcscpy(以及其他的大多数字符串处理函数),没有指定缓冲区最大长度的参数,所以函数不知道自己会破坏内存,也就不会报错。
  • strlen、wcslen、_tcslen等函数不会修改传入的字符串,所以这些函数没有问题。
头文件

StrSafe.h(在包含这个头文件的时候,String.h也会被包含进来)

  • 必须在包含了其他所有的文件以后才包含StrSafe.h。
  • 包含了这个头文件之后,C运行库中现有的衣服穿处理函数已被标记为废弃不用,如果使用了这些函数,编译会警告。
  • 使用(替换)的时候吗要考虑是否可能发生缓冲区溢出,如果不能从错误中恢复了,那么至少要考虑如何终止应用程序(尽可能优雅)。
函数

现有的每一个函数,都有一个对应的新版本的函数,前面的名称相同,只是在最后添加了_s(代表secure)后缀。

  • 首先验证传递给它们的参数值。(指针不为MULL,整数在有效范围内,枚举值是有效的,缓冲区足以容纳结果数据),如果有任何一项失败,函数会设置局部于线程的c运行时变量errno(并返回一个errno_t来指出成功或失败)。
  • Debug Build的时候,如果检查失败,会弹出Debug Assertion Failed对话框,然后终止应用程序。
  • Realse Build的时候,如果检查失败,会直接自动终止应用程序的运行。

具体的使用和对比什么的,明天再继续吧……

你可能感兴趣的:(C运行库中的安全字符串函数)