c - "safe"替代 "unsafe"C/C++ 标准库函数的 Mac 解决方案?

标签 c macos gcc

<分区>

Mac 上最好的一站式“安全”C 库解决方案是什么?我在“安全”/“不安全”上使用引号,因为关于某些标准库函数的好处或它们假定的改进替代品存在很多争论。

许多传统的标准 C 库函数(例如,vfprintf)被认为是不安全的,因为可能存在缓冲区溢出或其他安全问题。

在 Windows 上,Microsoft C/C++ 编译器 provide “_s”函数(例如,vfprintf_s)作为标准库调用的更安全替代方案。这些功能不是直接替代品,因为它们具有提供额外安全信息(例如缓冲区长度)所需的不同签名。它们还提供其他功能,例如无效格式字符串检测、不同的文件安全性等。据我所知,此实现在 Mac 上不可用。

Apple(或第三方)是否提供与 OSX 上的 GCC 类似的东西?

特别是,我正在寻找至少以下功能的“安全”实现:

fopen vfprintf vsprintf sprintf strncpy strcpy strcat

请注意:这个问题是关于 Mac 的。我并不是要征求您对 Microsoft 实现的意见(除非它在 ​​Mac 上可用。)尽管其中一些函数可能很容易由我自己编写,但并非所有函数都是如此。我不是在问如何自己写这些。我不是在寻求有关如何使用 STL 类来执行此操作的提示。我不是在问如何关闭警告。我的特殊需求非常具体。我正在尝试确定一个与传统 C 库调用尽可能相似的最佳实践 Mac API,同时增加安全性。当然,在 Mac 和 Windows(以及其他操作系统)上运行的可移植实现会更好。

最佳答案

首先,从MSDN打印关于“安全/不安全”函数的文档并刻录!

打开

和 fopen_s 一样安全...除非你是白痴并假设返回的指针不为 NULL,或者提供 NULL 作为输入参数。

vfprintf vsprintf sprintf 

只是MS不支持C99,使用snprintf系列。

 strncpy

如果你阅读手册就绝对安全

strcpy strcat

使用strncpystrncat 并阅读规范。 (即 strncpy 可能不是空终止的)

所以……再一次:

从 MSDN 打印关于“安全/不安全”函数的文档并刻录!

关于c - "safe"替代 "unsafe"C/C++ 标准库函数的 Mac 解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2169016/

相关文章:

c++ - 智能感知 : an array may not have elements of this type

c - 在 OS X 中使用 C 语言的 libpcap 时出现问题

bash - 如何根据磁盘ID获取磁盘名称?

gcc - (奇怪?)GCC 预处理器行为

c - 在 C 套接字通信中设置多个定时器

c++ - 变量名前面的*有什么作用?

c - GNU C 中的 __attribute__((const)) 与 __attribute__((pure))

macos - OpenGL 立方体未显示,可能有近平面和远平面吗?

c++ - 模板警告和错误帮助,(gcc)

c++ - 如何使用 OpenSSL 的 SHA256 函数