fopen 与 fopen_s (c++)

1. 前言

  • 旧版本的c++程序中,读取文件常采用fopen函数,但是在新的标准下会提示报错,提示fopen()并不安全(unsafe)。而带“_s”的版本是微软所做的改进方案,可以直接修改代码,但是比较麻烦。
  • 报错提示:
    error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
  • 一种兼容的解决方法:(针对于不想修改源码时)
    解决方案,项目 -->属性 --> c/c++ -->预处理器 --> 点击预处理器定义,编辑,加入_CRT_SECURE_NO_WARNINGS,即可。

2. 函数对比

2.1 fopen()

  • FILE * fopen(const char * path,const char * mode); 接收两个实参

    FILE *file;
    //若file= NULL,即文件未成功打开,函数返回false,否则返回true
    if((file= fopen("test.dat","w")) == NULL)   
    	return true;
    else   
    	return false;
    
  • fopen函数,可能被多个进程同时打开文件,进行读写操作,此时文件内容可能失去顺序性。

2.2 fopen_s

  • fopen_s函数没有这个问题,只要前一次文件打开后还没有关闭文件,后一个程序就无法打开这个文件。
  • fopen_s(&fp, szFile, "r"); 接受三个参数 注意第一个参数时 File** 类型 区别于 fopen的File*
fopen_s(&fp, szFile, "r");
    if(fp != NULL)
		{
        // See how long the file is
        while (fgetc(fp) != EOF)
            shaderLength++;
		
        // Allocate a block of memory to send in the shader
        assert(shaderLength < MAX_SHADER_LENGTH);   // make me bigger!
        if(shaderLength > MAX_SHADER_LENGTH)
			{
            fclose(fp);
            return false;
			}
........(省略)
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
`fopen_s` 函数是一个用于读写文件的 C 标准库函数,它提供了一种更加安全的方式来打开文件。 我们知道,通常在 C 语言中,可以使用 `fopen` 函数来打开文件并返回一个文件指针,以便进行后续的文件读写操作。但是,`fopen` 函数存在一些安全隐患,例如在一些情况下可能无法处理文件名超长、无法处理文件打开失败等问题。 为了解决这些问题,C11 标准引入了 `fopen_s` 函数作为 `fopen` 函数的替代品。`fopen_s` 函数的原型如下: ```c errno_t fopen_s(FILE** pFile, const char* filename, const char* mode) ``` 其中,`pFile` 是一个指针的指针,用于存储打开的文件指针;`filename` 是要打开的文件名;`mode` 是打开文件的模式,和 `fopen` 函数的模式参数一致。 与 `fopen` 函数不同的是,`fopen_s` 函数在打开文件时需要传入 `pFile` 参数,可以更好地处理文件打开失败的情况。如果文件打开成功,`fopen_s` 函数返回 0,否则返回一个错误码。 使用 `fopen_s` 函数打开文件的示例代码如下所示: ```c #include <stdio.h> int main() { FILE* pFile; errno_t err; err = fopen_s(&pFile, "example.txt", "r"); if (err != 0) { printf("无法打开文件\n"); return 1; } // 文件操作 fclose(pFile); return 0; } ``` 在上述代码中,我们首先定义了一个 `FILE` 类型的指针 `pFile` 来存储打开的文件指针。然后,我们调用 `fopen_s` 函数来打开文件,如果函数返回值不为 0,则表示打开文件失败。 最后,我们可以进行文件的读写操作,并在文件使用完毕后调用 `fclose` 函数关闭文件。 综上所述,`fopen_s` 函数是一个更安全的文件打开函数,可以更好地处理文件打开失败的情况,并通过错误码返回错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值