fopen和fopen_s用法的比较 【zz】

在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename,"w")。而对于fopen_s来说,还得定义另外一个变量errno_t err,然后err = fopen_s(&fp,filename,"w")。返回值的话,对于fopen来说,打开文件成功的话返回文件指针(赋值给fp),打开失败则返回NULL值;对于fopen_s来说,打开文件成功返回0,失败返回非0。

在vs编程中,经常会有这样的警告:warning 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.  是因为  fopen_s比fopen多了溢出检测,更安全一些。(在以后的文章里还有get与get_s的比较,strcpy strcpy_s的比较,他们的共同点都是用来一些不可预料的行为,以后将进行详尽解释)

#include <stdio.h>

FILE *stream, *stream2;

int main( void )
{
   int numclosed;
   errno_t err;

   // Open for read (will fail if file "crt_fopen_s.c" does not exist)
   if( (err  = fopen_s( &stream, "crt_fopen_s.c", "r" )) !=0 )
      printf( "The file ‘crt_fopen_s.c‘ was not opened\n" );
   else
      printf( "The file ‘crt_fopen_s.c‘ was opened\n" );

   // Open for write
   if( (err = fopen_s( &stream2, "data2", "w+" )) != 0 )
      printf( "The file ‘data2‘ was not opened\n" );
   else
      printf( "The file ‘data2‘ was opened\n" );

   // Close stream if it is not NULL
   if( stream)
   {
      if ( fclose( stream ) )
      {
         printf( "The file ‘crt_fopen_s.c‘ was not closed\n" );
      }
   }

   // All other files are closed:
   numclosed = _fcloseall( );
   printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}

原文:http://blog.163.com/[email protected]/blog/static/1704104522011111452835960/

时间: 2024-10-27 02:50:55

fopen和fopen_s用法的比较 【zz】的相关文章

fopen和fopen_s用法的比较

fopen和fopen_s用法的比较 fopen 和 fopen_s           fopen用法: fp = fopen(filename,"w").         fopen_s用法:,须定义另外一个变量errno_t err,然后err = fopen_s(&fp,filename,"w").        返回值: fopen打开文件成功,返回文件指针(赋值给fp),打开失败则返回NULL值:                       fo

unix fopen和fopen_s用法的比较

在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename,"w").而对于fopen_s来说,还得定义另外一个变量errno_t err,然后err = fopen_s(&fp,filename,"w").返回值的话,对于fopen来说,打开文件成功的话返回文件指针(赋值给fp),打开失败则返回NULL值:对于fopen_s来说,打开文件成功返回0,失败返回非0. 在vs编程中,经常会有这样的警告:warning C499

SVN switch 用法详解 (ZZ)

SVN switch 用法详解 (ZZ)  http://www.cnblogs.com/dabaopku/archive/2011/05/21/2052820.html 确实,以前不会用switch之前,就像文中提到的那样,先把trunk merge进branch,提交branch,再把branch merge进trunk,是很安全,很少会产生什么冲突,但是有点太麻烦了. switch的危险在于,如果switch之后常常忘记哪些文件是switch过的,需要查看文件的属性或者看revision

UVM phase的用法研究【zz】

原文地址:http://bbs.eetop.cn/viewthread.php?tid=383872&extra=&authorid=828160&page=1 我相信很多朋友都在坛子里下载过一份<UVM1.1应用指南和源代码分析>的资料,我很佩服这位前辈,我也从中收益匪浅,但是可惜在讲解phase的时候对一些初学者来说有些东西跳跃性有点大,更主要的是没有用一个稍微全面而复杂的例子来进行进一步的总结,让读者知道在实际项目中如何构建一个user-defined的phase

fopen()和fclose()的用法

1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分.如:"B:TEST.DAT""C:\\TC\\TEST.DAT"注意:如果将路径写成"C:\TC\TEST.DAT"是不正确的, 这一点要特别注意.fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名

文件操作fopen,fopen_s,_fsopen

最近程序中打开文件时,失败了,最后代码问题在: fopen_s(&pFile,strPath.c_str(),"rb+"); 主要是"rb+". 首先来看下介绍,主要是windows下的CRT相关的文件打开操作了. C89标准中是 fopen: FILE * fopen(const char *file, const char *mode); windows中有fopen_s,_fsopen的扩展: errno_t fopen_s(    FILE** pF

linux 标准I/O函数详解

1.I/O操作是系统的基础. I/O 表示的input[输入]和output[输出] .I/O操作是系统实现的基础.如果没有I/O操作,所以有的系统文件将无法存储,更谈不上处理与分析,系统运行的结果也不为用户所见. 2.系统IO与标准IO的区别 I/O 分为标准IO 和系统IO .标准io称为stdio,系统IO又称为文件IO.系统IO是内核提供给用户处理IO操作的接口.例如:标准C是不能处理输入输出问题的.必须借助于内核提供的接口实现对program的输入输出处理.标准I/O 是在系统IO的基

配置OpenCV产生flann\logger.h(66): error C4996: &#39;fopen&#39;: This function or variable may be unsafe问题[zz]

使用vs2012/2013配置opencv编译出现问题: 1>------ 已启动生成: 项目: Win32ForOpenCV245, 配置: Debug Win32 ------ 1>  stdafx.cpp1>  Win32ForOpenCV245.cpp1>f:\softs\opencv245\opencv\build\include\opencv2\flann\logger.h(66): error C4996: 'fopen': This function or vari

error C4996: &#39;fopen&#39;: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation

遇到这个问题,请打开项目的Properties(属性)------->Configuration Properties(配置属性)------>C/C++ ------>Preprocessor(预处理器)------->Preprocessor Difinitions (预处理器定义)   添加   _CRT_SECURE_NO_WARNINGS     之后点击OK.最后   应用------>确定. error C4996: 'fopen': This function