设为首页 加入收藏

TOP

C语言文件操作(FILE)与常用文件操作函数(三)
2019-08-13 05:39:24 】 浏览:125
Tags:语言 文件 操作 FILE 常用 函数
入的字符数不能超过限定缓冲区的大小,从而达到防止缓冲区溢出攻击的目的,


假如已定义一个有32字节的缓冲区buffer[32],那么在下面两条读字符串的语句中,后者的安全性更高


gets(buffer);


fgets(buffer,sizeof(buffer),stdin);//安全性更高


虽然系统隐含的I/O是指终端设备,但其实标准输入和标准输出是可以重新定向的,操作系统可以重新定向它们到其他文件或具有文件属性的设备,只有标准错误输出不能进行一般的输出重定向,


例如,在没有显示器的主机上,把标准输出定向到打印机,各种程序不用做任何改变,输出内容就自动从打印机输出


 


这里用“<”表示输入重定向用“>”表示输出重定向,例如:假设exefile时可执行程序文件名,执行该程序时,需要输入数据,现在如果要从文件file.in中读取数据,而非键盘输入,


那么在DOS命令提示符下,只要键入如下命令行即可


C:\exefile<file.in


于是exefile的标准输入就被“<”重定向到了file.in,c此时程序exefile只会专心致志地从文件file.in中读取数据,而不再理会你此后按下的任何一个按键,


再如,若键入如下命令行


C:\exefile>file.out


例:


 


将exe文件移到E盘,新建一个te.txt输入10然后保存,打开DOS命令行,转到E盘,输入test1.exe<te.txt回车,则te.txt文件中的10作为输入值,输出值为10



 


 


因为在Microsoft Visual C++ 2010 Express中使用fopen,fscanf等函数编译器会显示警告,


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、fscanf_s等函数


  fopen_s()函数


  函数原型:errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );


  pFile----文件指针将接收到打开文件指针指向的指针


    infilename----文件名


    mode----允许访问的类型


  fopen_s()打开文件成功返回0值,否则返回非0值


  须定义另外一个变量errno_t err


  例:


 


 


这里的errno_t是int的别名,在编译器crtdef.h头文件中有typedef int errno_t;


  fopen()与fopen_s()的区别


  fopen_s()函数比fopen()函数多了一个溢出检测,安全性上有所提升,在使用形式上fopen_s()比fopen()多使用了一个参数,


  需要特别注意的是:


  fopen的返回值是FILE *,返回的是指向结构体类型的指针


  而fopen_s的返回值是errno_t,返回的是errno_t(int)类型的数值


  例:fopen()函数


    fopen_s()函数


 


  fscanf_s()函数


  函数原型:fscanf_s(_Inout_ FILE * _File, _In_z_ _Scanf_s_format_string_ const char * _Format, ...);


  fscanf_s和fscanf的区别


  在使用形式上fopen_s()比fopen()多使用了一个参数,第四个参数是字节数(注意长度(strlen)和字节数(sizeof)的区别)


  例:fscanf()函数


     fscanf_s()函数


 


(前提条件:在E盘根目录下新建一个txt文档命名为ww.txt,内容输入about保存)


 


fopen()函数----fopen(文件路径, 文件使用方式);


 


fopen_s()函数----fopen_s(指向该文件指针的指针, 文件路径, 文件使用方式);


 


fread()函数----fread(内存首地址, 数据块大小, 数据块个数, 文件指针);


 


fwrite()函数----fwrite(内存首地址, 数据块大小, 数据块个数, 文件指针);


 


fscanf_s()函数----fscanf_s(文件指针, 格式参数, 存入地址, 字节数)


 


fprintf()函数----fprintf(文件指针, 格式参数, 输出列表)


 


fseek()函数----fseek(文件指针, 指针偏移量, 起始位置);


 


fgets()函数----fgets(内存首地址, 字符数, 文件指针);


  


fgetc()函数----fgetc(文件指针);


  


fputc()函数----fputc(变量名, 文件指针)


也可写成


  


fputs()函数----fputs(字符串, 文件指针)


 也可写成


 


首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言 队列(循环队列) 下一篇C语言 队列(链式队列)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目