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值;

                      fopen_s打开文件成功返回0,失败返回非0。

在定义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

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 );
}

fscanffscanf_s用法的比较

fscanf 和 fscanf_s

 

      fscanf用法:fscanf(fp,"%d",&var)

fscanf_s用法:fscanf(fp,"%d",&var,sizeof(int))

区别:fscanf_s需要指定长度

fscanf(格式化字符串输入)

相关函数
scanf,sscanf

表头文件
#include<stdio.h>

定义函数
int fscanf(FILE * stream ,const char *format,....);

函数说明
fscanf()会自参数stream的文件流中读取字符串,再根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结构存于对应的参数内。

返回值
成功则返回参数数目,失败则返回-1,错误原因存于errno中。

附加说明
 

范例
#include<stdio.h>
main()
{
int i;
unsigned int j;
char s[5];
fscanf(stdin,”%d %x %5[a-z] %*s %f”,&i,&j,s,s);
printf(“%d %d %s \n”,i,j,s);
}

执行
10 0x1b aaaaaaaaa bbbbbbbbbb
10 27 aaaaa

fscanf函数:

fscanf(fp,"%s",temp_str);和fscanf(fp,"%lf",&min_snr);

fscanf就是从文件中读取数据,保存到第三个参数开始的变量里,fp是一个FILE类型的指针。fscanf(fp,"%s",temp_str);  // 就是从文件指针fp里面读取一个字符串,保存到temp_str里面,跟scanf差不多,只是scanf是从键盘输入,fscanf是从文件里读取fscanf(fp,"%lf",&min_snr);

时间: 2024-10-13 21:19:09

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

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

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 C499

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的基

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

fopen()函数的用法

函数功能:打开一个文件 函数原型:FILE * fopen(const char * path,const char * mode); 相关函数:open,fclose,fopen_s,_wfopen fopen所需库:<stdio.h> 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno 中. 一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处

2018/9/25 VS平台c语言读文件fopen_s与fopen的区别

传统的c如下: FILE *fp: if((fp = fopen("E:\\input.txt", "r")) == NULL) { printf("Error!"); } VS平台上的fopen会报错,故而要使用fopen_s; FILE *fp; fopen_s(&fp, "E:\\input.txt", "r"); if(fp == NULL) { printf("Error!&qu

open与fopen的用法

1.  fopen    打开普通文件 带缓冲区 缓冲文件系统是借助文件结构体指针来对文件进行管理,通过文件指针来对文件进行访问,既可以读写字符.字符串.格式化数据,也可以读写二进制数据.   函数原型:FILE *fopen (const char * path,const char * mode); 所需库:<stdio.h> 返回值:文件顺利打开后,指向该流的文件指针就会被返回.如果文件打开失败则返回NULL,并把错误代码存在errno 中. 参数说明: 参数path字符串包含欲打开的文