我很遗憾被迫使用VS 2010进行项目,并注意到以下代码仍然不使用非标准兼容编译器构建:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
char buffer[512];
snprintf(buffer, sizeof(buffer), "SomeString");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(编译错误:C3861:'snprintf':找不到标识符)
我记得这是VS 2005的情况,我很震惊地看到它还没有被修复.
有没有人知道微软是否有计划将他们的标准C库迁移到2010年?
ISO C委员会(ISO/IEC JTC1/SC21/WG14)已发布TR 24731-1,正在研究TR 24731-2:
TR 24731-1:C库的扩展第一部分:边界检查接口
WG14正在研究更安全的C库函数.该TR旨在通过添加具有缓冲区长度的额外参数来修改现有程序.最新草案见N1225号文件.理由是在N1173号文件中.这将成为技术报告类型2.
TR 24731-2:C库的扩展 - 第二部分:动态分配功能
WG14正在研究更安全的C库函数.该TR面向使用动态分配而不是缓冲区长度的额外参数的新程序.最新草案见N1337号文件.这将成为技术报告类型2.
什么是Mac上最好的一站式"安全"C库解决方案?我使用"安全"/"不安全"的引用,因为关于某些标准库函数或其推定改进的替代品的好处存在很多争论.
vfprintf由于可能存在缓冲区溢出或其他安全问题,许多传统的标准C库函数(例如)被认为是不安全的.
在Windows上,Microsoft C/C++编译器提供 "_s"函数(例如vfprintf_s)作为标准库调用的更安全的替代方法.这些功能不是直接替换,因为它们具有提供附加安全信息(例如,缓冲区长度)所必需的不同签名.它们还提供其他功能,例如无效的格式字符串检测,不同的文件安全性等.据我所知,这种实现在Mac上不可用.
Apple(或第三方)是否在OSX上提供与GCC类似的任何内容?
特别是,我正在寻找至少以下功能的"安全"实现:
fopen vfprintf vsprintf sprintf strncpy strcpy strcat
请注意:这个问题与Mac有关.我不是要求你就微软的实现提出你的意见(除非它可以在Mac上使用.)虽然其中一些功能可能很容易自己编写,但并非所有功能都可以.我不是在问自己如何写这些.我不是要求提供有关如何使用STL类来做到这一点的技巧.我不是在问如何关闭警告.我的特殊需求非常具体.我正在尝试确定最佳实践Mac API,它与传统的C库调用尽可能相似,同时增加了安全性.当然,在Mac和Windows(以及其他操作系统)上运行的便携式实现会更好.
我的程序在几个平台上运行.其中,Windows CE.目前,sprintf被广泛使用,导致缓冲区溢出等问题很多.我想用snprintf调用替换它们.对于Visual Studio,我发现了这个问题,它解决了问题的win32部分:
但我不能让它适用于Windows CE,因为函数_vsnprintf_s和_vscprintf,以及常量_TUNCATE都不可用.有人知道在Windows CE上复制snprintf(linux)行为的方法吗?