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))及其原理可在以下位置获得:

  • http://www.open-std.org/jtc1/sc22/wg14

  • 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);
    

    运行时约束
    streamptrfilenamemode都不是空指针。

    如果存在运行时约束冲突,则fopen_s不会尝试打开文件。
    此外,如果streamptr不是空指针,则fopen_s*streamptr设置为
    空指针。

    描述

    关于c++ - 为什么我不能使用fopen?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/906599/

    10-10 20:40