我有一个混合了C和C ++的旧项目。它大量使用C字符串以及strcpy
,strcat
,strncpy
,strncat
等。我发现了一些缓冲区溢出,我想使用更安全的功能,例如strcpy_s
。 MSVC包含这些功能,但我需要能够在各种平台上运行的东西 - 至少是linux,osx和windows。
我知道strlcpy
,但正如很多人注意到的那样(example),这确实不是一种改进。
那么:是否有strcpy_s
,strcat_s
等或整个TR24731-1
的免费实施?
我需要public domain
或BSD
,但如果您知道其他许可下的实施,请继续列出 - 我相信其他人也会受益。
答案 0 :(得分:12)
尝试使用Safe C库。它位于MIT license之下,根据此list实现了您正在寻找的功能:
Safe C Library根据ISO / IEC TR24731提供绑定的检查内存和字符串函数。 这些函数是现有标准C库的替代函数,可以促进更安全,更安全的编程
答案 1 :(得分:4)
您可以使用memcpy
和memset
等,它们比字符串函数更便携,更安全。
答案 2 :(得分:1)
为什么不使用strncpy
和strncat
?与strlcpy
和strlcat
相反,它们是标准C函数。这些功能并不完美,但您可以安全地使用它们。
还要注意,边界检查_s
函数在当前标准中是可选的。