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.
在Visual Studio 2005 C++编译器上,当我的代码使用fopen和此类调用时,我收到以下警告.
1>foo.cpp(5) : warning C4996: 'fopen' was declared deprecated
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(234) : see declaration of 'fopen'
1> Message: 'This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
Run Code Online (Sandbox Code Playgroud)
我该如何防止这种情况?
我正在将一些代码移植到Windows,而Microsoft编译器(Visual C++ 8)告诉我这strerror()
是不安全的.
撇开微软所有安全字符串中的烦恼因素,我实际上可以看到一些已弃用的函数是危险的.但我无法理解可能出现的问题strerror()
.它需要一个code(int
),并返回相应的字符串,如果该代码未知,则返回空字符串.
危险在哪里?
在C中有一个很好的选择吗?
C++中有一个很好的替代品吗?
[编辑]
得到了一些很好的答案,现在理解一些实现可能疯狂到实际写入一个共同的共享缓冲区 - 在单线程中不安全的重入,没关系线程之间! - 我的问题不再是"为什么我不能使用它,有什么替代方案?" "C和/或C++中是否有任何体面,简洁的替代品?"
提前致谢
我在中学教编程:这是我们目前的状态,我将不胜感激任何建议:
那么这些学生最好的解决方案是什么?这些要求快速,可靠且非常容易取消IDE.控制台输出就足够了,比如"编辑和播放按钮".不需要可视化编程和调试工具.IDE应该是免费的,最好在Windows上运行.
我最喜欢的是MSVC 2008 Express - 它非常快速而且非常简单.但是C++/CLI不是C++(托管代码不是基础代码),所以这不是一个选项.还有其他建议吗?