用函数fopen_s打开数据文件
2015-06-06 13:24
519 查看
学习C语言,对文件的输入和输出,打开一个数据文件,一般教材用fopen函数,但是一些编译器编译无法通过,笔者用的Vs2013,提示用fopen_s函数代替,fopen_s函数怎么用呢?
例子选自谭浩强老师的《C语言程序设计(第四版)》(其实我觉得叫做C语言入门更贴切),[例10.1] 从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止。
上面是一个可以编译通过,正确运行的源程序。下面作分析和总结。
fopen_s函数声明如下:
errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
fopen_s函数有3个参数,它的调用方式为:fopen_s(指针,文件名,使用文件方式);其中指针是用来接收<指向打开的文件的指针>的指针。
fopen函数的返回值是一个指向文件的指针,而fopen_s函数的返回值则不同,正确返回0,不正确返回非0。
要定义一个变量来接收fopen_s函数的返回值,即errno_t err; 其中errno_t是int的别名,typedef int errno_t;即err是个整型值,用来接收fopen_s函数的返回值。通过判断err的值是否为0,可以知道打开数据文件成功与否,这是不同点1。
判断打开成功与否fopen_s用(err = fopen_s(&fp, filename, “w”)) !=0,因为它的返回值是整型,而fopen判断打开成功与否,用fp = fopen(filename, “w”)) ==NULL因为它的返回值是指针,打开失败返回空指针NULL,这是不同点2。
FILE *fp;定义fp是一个指向FILE类型数据的指针变量,&p就是一个指向FILE类型数据的指针变量的地址,也就是一个<指向FILE类型数据的指针变量>的指针变量。有点绕,其实只要记住,先如FILE *fp;定义一个指向FILE类型数据的指针变量,在fopen_s的参数,在定义的指针变量前加&即可。
C程序输出结果:
路漫漫其修远兮,吾将上下而求索!
例子选自谭浩强老师的《C语言程序设计(第四版)》(其实我觉得叫做C语言入门更贴切),[例10.1] 从键盘输入一些字符,逐个把它们送到磁盘上去,直到用户输入一个“#”为止。
#include<stdio.h> #include<stdlib.h> int main() { FILE *fp; errno_t err; //不同点1 char ch, filename[10]; printf("请输入所用的文件名:"); scanf_s("%s", filename,10); if ((err = fopen_s(&fp, filename, "w")) !=0) //不同点2 { printf("无法打开此文件\n"); //如果打不开,就输出打不开 exit(0); //终止程序 } ch = getchar(); //用来接收最后输入的回车符 printf("请输入一个准备存储到磁盘的字符串(以#结束):"); ch = getchar(); //用来接收从键盘输入的第一个字符 while (ch != '#') //当输入“#”时结束循环 { fputc(ch, fp); //向磁盘输出一个字符 putchar(ch); //将输出的字符显示在屏幕上 ch = getchar(); //再接收从键盘输入的一个字符 } fclose(fp); //关闭文件 putchar(10); //向屏幕输出一个换行符 return 0; }
上面是一个可以编译通过,正确运行的源程序。下面作分析和总结。
fopen_s函数声明如下:
errno_t fopen_s(
FILE** pFile,
const char *filename,
const char *mode
);
fopen_s函数有3个参数,它的调用方式为:fopen_s(指针,文件名,使用文件方式);其中指针是用来接收<指向打开的文件的指针>的指针。
fopen函数的返回值是一个指向文件的指针,而fopen_s函数的返回值则不同,正确返回0,不正确返回非0。
要定义一个变量来接收fopen_s函数的返回值,即errno_t err; 其中errno_t是int的别名,typedef int errno_t;即err是个整型值,用来接收fopen_s函数的返回值。通过判断err的值是否为0,可以知道打开数据文件成功与否,这是不同点1。
判断打开成功与否fopen_s用(err = fopen_s(&fp, filename, “w”)) !=0,因为它的返回值是整型,而fopen判断打开成功与否,用fp = fopen(filename, “w”)) ==NULL因为它的返回值是指针,打开失败返回空指针NULL,这是不同点2。
FILE *fp;定义fp是一个指向FILE类型数据的指针变量,&p就是一个指向FILE类型数据的指针变量的地址,也就是一个<指向FILE类型数据的指针变量>的指针变量。有点绕,其实只要记住,先如FILE *fp;定义一个指向FILE类型数据的指针变量,在fopen_s的参数,在定义的指针变量前加&即可。
C程序输出结果:
请输入所用的文件名:file1.dat 请输入一个准备存储到磁盘的字符串(以#结束):computer and c# computer and c 请按任意键继续. . .
路漫漫其修远兮,吾将上下而求索!
相关文章推荐
- 大型网站技术架构
- 学习docker
- shell变量详解
- OpenCms 9.5.1 新建一个站点
- Centos的安装
- Tomcat学习之Wrapper
- 《Unix环境高级编程第3版》apue.3e在Linux上无法安装的问题
- window nginx 启动无提示错误,却没有listen 80端口
- ecshop、织梦、discuz、wordpress比较
- TopCoder SRM 660 Div2 Problem 500 - PrivateD2party (贪心)
- 21讲项目实战CMS-wordpress主题网站模板制作
- 30讲项目实战:网站面包屑导航+表单功能开发
- 28讲项目实战:网站搜索功能+单页面开发
- 29讲项目实战:404页面制作+网站友情链接调用
- 讲项目实战:网站会员功能开发+登录/注册表单
- 压力测试中出现:“Too many open files”异常导致weblogic无法继续正常访问
- <Linux内核源码>文件系统VFS内核4.0.4版本基本概念源码
- Hadoop学习笔记(十三)---Hbase的伪分布安装及配置
- 在 Mac 上搭建 Nginx PHP Mysql 开发环境
- hadoop2.6 和hive1.2