C语言文件那块的if((fp=fopen(filepath,"w"))==NULL)中为什么不用

C语言文件那块的if((fp=fopen(filepath,"w"))==NULL)中为什么不用*fp=。我困扰在fp不相当于地址么*fp不是取值么。... C语言文件那块的if((fp=fopen(filepath,"w"))==NULL)中为什么不用*fp=。 我困扰在fp不相当于地址么 *fp不是取值么。 展开
 我来答
tattackor
推荐于2016-06-06 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:858万
展开全部

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.例程:

#include<stdio.h>
#define F_PATH "d:\\myfile\\file.dat"
int main(){
    FILE*fp=NULL;//需要注意
    fp=fopen(F_PATH,"r");
    if(NULL==fp)
    {
        return -1;//要返回错误代码
    }
    fclose(fp);
    fp=NULL;//需要指向空,否则会指向原打开文件地址
    
    return 0;
}
卡尔的笔记
推荐于2018-03-02
知道答主
回答量:11
采纳率:0%
帮助的人:9万
展开全部
首先,得冒昧的说明一下,你写的这条语句有个小错误:“=”改为“==”。
其次,fp是通过“FILE *fp;”语句声明的,可见fp为文件指针类型,而fopen函数的返回值也为文件指针类型,所以左值使用fp而非*fp。这个情景类似于返回int类型的函数需要使用一个int类型的变量来接收其返回值一个道理。
最后,谢谢,积分呀。嘻嘻
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金色潜鸟
2014-01-22 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5515万
展开全部
fp 是指针, 指向 FILE 型结构。
变量声明 是 FILE *fp;
fopen() 函数,返回值 是 FILE 型 指针。
所以 语句里这样赋地址值: fp=fopen(filepath,"w")
赋值后,FILE 型 指针 fp 若等于 NULL,就表示 赋值失败,文件打开失败。
---
为什么不用*fp=。 因为 fopen() 函数,返回值 是 FILE 型 地址,不是数值。
==============
如果在声明里写:
FILE *fp=fopen(filepath,"w"); 这是允许的。因为是声明,这里外形是*fp, 实际上是地址。
然后 语句里:
if (!fp) { printf("open error !\n"); return 0;};
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
暗星漂流
2014-01-21 · 超过29用户采纳过TA的回答
知道答主
回答量:110
采纳率:0%
帮助的人:51.7万
展开全部
因为fopen返回的就是指向文件结构的指针,你fp肯定就是定义的FILE*类型,返回值和你定义的当然要匹配
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
veket的小号
2014-01-21 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3933万
展开全部

摘取devc++中stdio.h中的FILE文件结构体的定义 来分析一下

/*
 * The structure underlying the FILE type.
 *
 * Some believe that nobody in their right mind should make use of the
 * internals of this structure. Provided by Pedro A. Aranda Gutiirrez
 * <paag@tid.es>.
 */
#ifndef _FILE_DEFINED
#define_FILE_DEFINED
typedef struct _iobuf
{
char*_ptr;
int_cnt;
char*_base;
int_flag;
int_file;
int_charbuf;
int_bufsiz;
char*_tmpfname;
} FILE;
#endif/* Not _FILE_DEFINED */

fopen等函数的原型声明

/*
 * File Operations
 */
_CRTIMP FILE* __cdecl fopen (const char*, const char*);
_CRTIMP FILE* __cdecl freopen (const char*, const char*, FILE*);
_CRTIMP int __cdeclfflush (FILE*);
_CRTIMP int __cdeclfclose (FILE*);

至于_CRTIMP、__cdecl是干什么的 我们不管

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

所以定义 FILE *p; 以后 可以用指针变量p接收 fopen函数返回值的赋值

p是指向某个FILE结构体类型变量的指针变量,*p是p指向的某个FILE类型的变量 

至于这个“某个FILE结构体类型变量”

,怎么来的, 我们不用管 ,因为操作系统会管 轮不到我们来管

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式