在a previous question I asked about the so-called safe library deprecations的模型中,我发现自己同样对为何不赞成使用fopen()
感到困惑。
该函数接受两个C字符串,并返回FILE * ptr,如果失败则返回NULL。线程安全问题/字符串溢出问题在哪里?或者是别的什么?
提前致谢
最佳答案
有正式的ISO/IEC JTC1/SC22/WG14(C语言)技术报告 TR24731-1 (边界检查接口(interface))及其原理可在以下位置获得:
TR24731-2(动态分配功能)也有工作。
声明的
fopen_s()
理由是:规格说明:
6.5.2.1 fopen_s函数
概要
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
errno_t fopen_s(FILE * restrict * restrict streamptr,
const char * restrict filename,
const char * restrict mode);
运行时约束
streamptr
,filename
或mode
都不是空指针。如果存在运行时约束冲突,则
fopen_s
不会尝试打开文件。此外,如果
streamptr
不是空指针,则fopen_s
将*streamptr
设置为空指针。
描述
关于c++ - 为什么我不能使用fopen?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/906599/