首页 > 编程知识 正文

指针c语言,fopen c语言

时间:2023-05-06 18:54:41 阅读:156916 作者:3860

fopen

函数原型: file*fopen(constchar*path,const char * mode );

相关函数: open,fclose,fopen_s,_wfopen

返回值:如果文件被成功打开,则会返回指向该流的文件指针。 如果文件打开失败,则返回NULL,并将错误代码存储在error中。

函数概述

函数原型: file*fopen(constchar*path,const char * mode );

返回值:如果文件被成功打开,则会返回指向该流的文件指针。 如果文件打开失败,则返回NULL,并将错误代码存储在error中。

一般来说,在打开文件后进行读取或写入文件的动作。 如果文件打开失败,下一个读写操作也将无法顺利进行,因此在fopen ()之后通常会做出错误的判断或处理。

参数说明:

参数path字符串包含要打开的文件的路径和文件名,参数mode字符串表示流的形式。

mode包含以下形式的字符串:

字符串说明r以只读方式打开文件。 此文件必须存在。 r用读取/写入打开文件。 此文件必须存在。 rb以读写方式打开二进制文件,只允许读写数据。 rt以读写方式打开文本文件,允许读写。 w打开只读文件,如果文件存在,当文件长度为零时,该文件的内容将消失; 如果文件不存在,请创建它。 w打开可读写文件,如果该文件存在,则文件的长度为零,并且该文件的内容将消失。 如果文件不存在,请创建它。 a用附加的方法只写入文件。 如果文件不存在,则会创建文件。 如果文件存在,则写入的数据将添加到文件的末尾。 这意味着将保留文件的原始内容(保留EOF符号)。 a打开时附加一个可读写的文件。 如果文件不存在,则会创建该文件。 如果文件存在,则写入的数据将添加到文件的末尾。 这意味着将保留文件的原始内容。 不保留EOF符号。 web以只读方式打开或新建二进制文件,只允许写入数据。 web以读写方式打开或创建新的二进制文件,以允许读写。 wt通过读取/写入打开或创建新的文本文件,以允许读取和写入。 at可以通过读取/写入打开文本文件,并在读取或文本的末尾添加数据。 ab可以通过读写打开二进制文件,并在读取或文件的末尾添加数据。 以x结尾的模式是独占模式,如果文件已经存在或无法创建,fopen通常会因路径不正确而失败。 文件以操作系统支持的独占模式打开。

可以在上述形态字符串中添加rb、w b、ab等组合的b字符。 添加b字符可以告诉库以二进制模式打开文件。 如果不加上b,则缺省情况下会加上t,即rt、wt。 其中t表示以文本模式打开文件。 在fopen ()中创建的新文件将被授予s _ IR usr|s _ iw usr|s _ IR grp|s _ iwg RP|s _ I Roth|s _ iwo th ) 0666 )权限

请注意,某些C编译系统可能无法完全提供这些功能,有些C版本可能是' rw '、" wr "、" ar "等,而不是' r '、" w "、" a "。

二进制和文本模式的区别

1、在Windows系统上,在文本模式下,文件用“rn”表示换行符。 在文本模式下打开文件并使用fputs等函数写入换行符“n”时,该函数会自动在“n”之前加上“r”。 这意味着实际写入文件的是“rn”。

2、在Unix/Linux类系统的文本模式下,文件用“n”表示换行符。 因此,在Linux系统上,文本模式和二进制模式是没有区别的。

打开方式总结:每种打开方式主要有三个区别

1、打开是否为二进制文件,用“b”表示。

2、读写方式有以下几种。 有只读、写入专用、读写专用、追加写入专用、追加读写方式。

3、根据文件是否必须存在,以及存在时是清空还是追加,反应不同。 具体判断如下图所示。

示例程序

样品1

#include stdio.h

# definef _ path“d :my filefile.dat”

入主(void ) )。

{

file FP=空; /需要注意/

FP=fopen(f_path,“r”);

if (空值==FP ) )。

{

返回- 1; /返回错误代码/

}

flose(FP );

fp=NULL; /必须指向空。 否则,它将指向原始打开的文件的地址/

返回0;

}

样品2

#include stdio.h

#includestdlib.h/exit (为了使用() ) /

入主(void ) )。

{

int i=0; 用于接收putchar getc数据*

char *ch=“”;

file FP=空;

char fname[50]; /用于存储文件名/

printf (“输入文件名:”

scanf('%s ',fname );

FP=fopen(fname,“r”); /只读/

if (空值=

= fp) / 如果失败了 /
{
printf(“错误!”);
exit(1); / 中止程序 /
}
while ((ch[i] = getc(fp)) != EOF)
{
putchar(ch[i]);
i ++;
}
fclose(fp); / 关闭文件 /
fp = NULL; / 需要指向空,否则会指向原打开文件地址 */
return 0;
}
注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上!
示例三
#include <stdio.h>
FILE *stream, *stream2;

int main(void)
{
int numclosed; /打开读取(如果文件“crt_fopen”将失败。c"不存在)/
if ((stream = fopen(“crt_fopen.c”, “r”)) == NULL) /* C4996 /
//注意:不推荐使用fopen;考虑使用fopen_s代替p
printf(“The file ‘crt_fopen.c’ was not openedn”);
else
printf(“The file ‘crt_fopen.c’ was openedn”); / Open for write /
if ((stream2 = fopen(“data2”, “w+”)) == NULL) / C4996 /
printf(“The file ‘data2’ was not openedn”);
else
printf(“The file ‘data2’ was openedn”);
/ Closes tream if it is not NULL /
if (stream)
{
if (fclose(stream))
{
printf(“The file ‘crt_fopen.c’ was not closedn”);
}
}
/ All other files are closed: */
numclosed = _fcloseall();
printf(“Number of files closed by _fcloseall: %un”, numclosed);
}
注意
在文件操作时,需要注意以下几点问题:
1、在定义文件指针时,要将文件指针指向空;如 FILE *fp = NULL;
2、在文件操作完成后,需要将文件关闭,一定要注意,否则会造成文件所占用内存泄漏和在下次访问文件时出现问题。
3、文件关闭后,需要将文件指针指向空,这样做会防止出现游离指针,而对整个工程造成不必要的麻烦;如:fp = NULL;

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。