C语言文件那块的if((fp=fopen(filepath,"w"))==NULL)中为什么不用*fp=。 我困扰在fp不相当于地址么 *fp不是取值么。
1.if当中应该使用((fp=fopen(filepath,"w"))!=NULL),当返回的指针不等于NULL时,表示文件被正确打开。
2.fopen的函数原型:FILE * fopen(const char * path,const char * mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
3.例程:
摘取devc++中stdio.h中的FILE文件结构体的定义 来分析一下
/*fopen等函数的原型声明
至于_CRTIMP、__cdecl是干什么的 我们不管
fopen的返回值类型是 FILE* 即指向结构体的指针类型
所以定义 FILE *p; 以后 可以用指针变量p接收 fopen函数返回值的赋值
p是指向某个FILE结构体类型变量的指针变量,*p是p指向的某个FILE类型的变量
至于这个“某个FILE结构体类型变量”
,怎么来的, 我们不用管 ,因为操作系统会管 轮不到我们来管