C Primer Plus学习 四十一 fopen ()函数
来源:互联网 发布:毛棕榈油的用途知乎 编辑:程序博客网 时间:2024/05/25 23:29
fopen ()函数
这一函数在stdiah中声明。它的第一个参数是要打开的文件名;更确切地说,是包含该文件名的字符串的地址。第二个参数是用于指定文件打开模式的一个字符串 C库提供了一些可能的模式,如表13.1。
fopen ()函数返回一个文件指针(file pointer),其他I/O函数用这个 指针来指定该文件。文件指针(比如这个例子中的fp)是…种指向FILE的指针;FILE是stdio.h中定义的 一种派生类型。指针fp并不指向实际的文件,而是指向一个关于文件的信息的数据包,其中包括文件I/O 使用的缓冲区信息。因为标准库中的I/O函数使用缓冲区,所以它们需要知道缓冲区的位置,还需要知道 缓冲R的当前缓冲能力以及所使用的文件。这样这些函数在必要的时候可以再次填充或者清空缓冲区。fp 指向的数据包中包含全部这些信息。
如果不能打开文件,fopen ()函数返回空指针(也是在stdio.h中定义的)。如果fp为NULL,程序 将退出。磁盘己满、文件名非法、存取权限不够或者硬件问题等都会导致fopen ()函数执行失畋。这就 需要査找故障,一个小问题的查找也可能颇费周折。
/* count.c --使用标准 I/O*/
#include<stdio.h>
#include<stdlib.h>// ANSI C 的 exit ()原型
int main(int argc,char *argv[])
{
int ch; //读取时存储每个字符的位置
FILE *fp; //文件指针
long count=0;
if(argc!=2)
{
printf("Usage:%s filename\n",argv[0]);
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL)
{
printf("Can't open %s\n",argv[1]);
exit(1);
}
/*
fp=fopen("d:\\dome\\dome13\\ad.txt","r");
if(fp==NULL)
{
printf("Can't open %s\n","d:\dome\dome13\ad.txt");
exit(1);
}
*/
while((ch=getc(fp))!=EOF)
{
putc(ch,stdout);//相当于 putchar
count++;
}
fclose(fp);
printf("\nFile %s has %ld characters\n",argv[1],count);
return 0;
}
输出结果:
1是让程序运行,2是文件的地址。
这两个函数的工作方式和函数getchar (.)与putchar ()非常相似,不同之处在于您需要告诉getc () 和putc ()函数它们要使用的文件。所以,下面的方法从标准输入获得一个字符:getc ()函数和 putc ()函数
ch = getchar ();但下面的语句表示从指针fp指定的文件中获得一个字符:
ch = getc (fp);与之类似,以下语句表示将字符ch写入到FILE指针fpout指定的文件中:
putc (ch. fpout):在putc ()函数的参数表中,首先是字符,然后是文件指针。
程序清单13•丨把stdout作为putc ()函数的第二个参数„ stdout是在stdio.h中定义的与标准输出相关 联的文件指针,所以putc (ch, stdout)和putchar (ch)的作用是一样的。实际上,后者一般通过前者定 义。类似地,getchar ()使用作为标准输入的getc ()定义。
既然这样,为什么这个例子中要使用putc ()代替putchar ()呢?个原因就是要介绍putc ()函数, 另一个原因是通过使用stdom之外的参数,可以很容易地将这段程序改写为向文件进行输出。
- C Primer Plus学习 四十一 fopen ()函数
- 《C Primer Plus》学习笔记之 函数
- C Primer Plus学习 十六 函数概述
- C Primer Plus学习 五十四 内联函数
- C Primer Plus学习 五十六 qsort ()函数
- C Primer Plus学习
- C Primer Plus(九) 函数
- 学习《C Primer Plus》---存储类和函数
- C Primer Plus学习 十一 ctype.h系列字符函数
- C Primer Plus学习 二十 函数、数组和指针
- C Primer Plus学习 二十三 字符串输入 gets ()函数
- C Primer Plus学习 二十四 字符串输入 fgets ()函数
- C Primer Plus学习 二十五 字符串输入 puts ()函数
- C Primer Plus学习 二十六 字符串输入 fputs ()函数
- C Primer Plus学习 二十七 string.h strcat()函数
- C Primer Plus学习 二十八 string.h strlen ()函数
- C Primer Plus学习 二十九 string.h strncat()函数
- C Primer Plus学习 三十二 string.h sprintf()函数
- ipv6 解决方案 详细版
- isNaN()函数
- 单例模式
- 位掩码(BitMask)
- Qt5在VS下定义exe图标的方法
- C Primer Plus学习 四十一 fopen ()函数
- 使用WKWebView增加自动布局约束遇到的问题
- ASP.NET MVC4 下部署子级非MVC应用程序问题
- Android下使用TCPDUMP抓包Wireshark分析数据啦
- pintool调试与pin打开的应用程序调试
- 动态申请二维数组的原理
- mysql中max_allowed_packet参数的配置方法(避免大数据写入或者更新失败)
- 关于前后台分离时nginx图片访问路径问题
- 数据结构之自建算法库——顺序栈