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 fopen函数

  • FILE * fopen(const char * path,const char * mode); 接收两个实参
参数一:文件的路径
参数二:文件打开方式 “r” 只读
“r+” 在读的基础上加上写
“rb” 只读二进制
“rb+” 加上写
“w” “w+” “wb” “wb+” 只写…
“a” “a+” “ab” “ab+” 从文件末尾开始写,只写 …

用法:FILE *file(“E:\test.txe”,“r”);

FILE *file;
//若file= NULL,即文件未成功打开,函数返回false,否则返回true
if((file= fopen("test.dat","w")) == NULL)   
	return true;
else   
	return false;

  • fopen函数,可能被多个进程同时打开文件,进行读写操作,此时文件内容可能失去顺序性。

3 fopen_s

  • fopen_s比fopen多了溢出检测,更安全一些。

  • fopen_s函数没有(可能被多个进程同时打开文件,进行读写操作,文件内容可能失去顺序性 的问题),只要前一次文件打开后还没有关闭文件,后一个程序就无法打开这个文件。

fopen_s(&pFile,const char *filename,const char *mode );接受三个参数

注意第一个参数时 File** 类型 区别于 fopen的File

参数一:取地址存数
参数二:文件的路径
参数三:文件打开方式

示例

FILE* pFile;
fopen_s(&pFile, "example.txt", "w");

4 fscanf 和 fscanf_s

  • fscanf用法:fscanf(fp,“%d”,&var) //对比scanf

  • fscanf_s用法:fscanf(fp,“%d”,&var,sizeof(int))

  • 区别:fscanf_s需要指定长度

参考:

fopen 和 fopen_s

fopen 与 fopen_s (c++)

fopen与fopen_s的区别

fopen和fopen_s简介

C语言进阶

更多推荐