在学习C语言的过程中,我经常会遇到一些资源,建议永远不要使用某些功能(例如gets()
),因为它们很难或不可能安全使用.
如果C标准库包含许多"从不使用"的函数,那么似乎有必要了解它们的列表,什么使它们不安全,以及如何取而代之.
到目前为止,我已经了解了以下功能:
- 无法防止重写内存
- 不保证以null结尾字符串
- 在通话之间保持内部状态
通常被认为使用是不安全的.是否有显示这些行为的函数列表?有没有其他类型的功能不可能安全使用?
在学习C语言的过程中,我经常会遇到一些资源,建议永远不要使用某些功能(例如gets()
),因为它们很难或不可能安全使用.
如果C标准库包含许多"从不使用"的函数,那么似乎有必要了解它们的列表,什么使它们不安全,以及如何取而代之.
到目前为止,我已经了解了以下功能:
通常被认为使用是不安全的.是否有显示这些行为的函数列表?有没有其他类型的功能不可能安全使用?
在过go ,大多数字符串函数都没有边界判断.当然,他们不能简单地删除旧函数,或者修改签名以包含上限,这会 destruct 兼容性.现在,对于这些函数中的几乎每个函数,都有一个可选的"n"版本.例如:
strcpy -> strncpy
strlen -> strnlen
strcmp -> strncmp
strcat -> strncat
strdup -> strndup
sprintf -> snprintf
wcscpy -> wcsncpy
wcslen -> wcsnlen
还有更多.
另请参见第https://github.com/leafsr/gcc-poison节,它是一个创建头文件的项目,如果您使用不安全的函数,该文件会导致GCC报告错误.