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;
			}
........(省略)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值