【14】C++实战篇——【fopen 和 fopen_s 】、【fscanf 和 fscanf_s】
·
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需要指定长度
参考:
更多推荐

所有评论(0)