barriers / 阅读 / 详情

C语言问题,关于文件操作的

2023-06-23 07:26:07
共3条回复
西柚不是西游

修改一

#include<stdio.h>

#include<stdlib.h>

int main()

{

FILE *infile,*outfile;

int m,i=0;

char c;

outfile=fopen("test.txt","w");

while(i<5)

{

fprintf(outfile,"%c %d",65,10); //把这个回车去掉

i++;

}

fclose(outfile);

infile=fopen("test.txt","r");

while(!feof(infile))

{

fscanf(infile,"%c %d",&c,&m); //fgetc(inflie) 去掉

printf("%c %d ",c,m);

}

fclose(infile);

return 0;

}

--------修改2

#include<stdio.h>

#include<stdlib.h>

int main()

{

FILE *infile,*outfile;

int m,i=0;

char c;

outfile=fopen("test.txt","w");

while(i<5)

{

fprintf(outfile,"%c %d ",65,10);

i++;

}

fclose(outfile);

infile=fopen("test.txt","r");

while(!feof(infile))

{

fscanf(infile,"%c %d ",&c,&m); //这里%d后加个空格,

printf("%c %d ",c,m); //可能是fscanf输入格式对齐问题,

}

fclose(infile);

return 0;

}

每一行当然是 A 10

你给的就是五次A 10

不过那个fscanf %d 后加个空格的还是第一次见到

自己调试看看

贝贝

#include<stdio.h>

#include<conio.h>

int main()

{

FILE *infile,*outfile;

int m,i=0;

char c;

outfile=fopen("test.txt","w");

while(i<5)

{

fprintf(outfile,"%c %d ",65,10);

i++;

}

fclose(outfile);

infile=fopen("test.txt","r");

fscanf(infile,"%c %d",&c,&m);/***************************/

fgetc(infile);/***************************/

while(!feof(infile))

{

printf("%c %d ",c,m);/***************************/

fscanf(infile,"%c %d",&c,&m);/***************************/

fgetc(infile); /***************************/

}

fclose(infile);

getch();

return 0;

}

程序中/***************************/的语句是我做的一些调整,你的程序多输出一行的原因是不明白feof()函数的用法,对于这个函数它是对文件读写的状态的判断,而判断的依据是上一次读写的结果的状态,所以正确的使用方法是先读再判断这样就不会出错。

snjk

生成的文件多了一个空行导致!!!

相关推荐

C语言文件关闭函数fclose(文件指针)是什么?

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。该函数在stdio.h中声明,原型为:intfclose(FILE*fp);当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。如果关闭成功,返回0,否则返回负值。C语言文件操作的标准流程为1、fopen打开文件;2、通过各种读写函数,读写文件;3、所有操作结束后,调用fclose关闭文件。
2023-06-22 23:14:021

C语言中 fclose(fp) 啥意思

输入输出流是用缓冲区的fclose();调用后会刷新缓冲区,因此会输出结果
2023-06-22 23:14:124

fclose关闭文件阻塞

fclose关闭文件阻塞的步骤有4步。1、fclose()函数功能为:关闭一个流,把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。2、点击文件,双击程序中间空格(缓冲区),点击操作缓冲区。3、将程序重新输入缓冲内,等待1~2分钟。4、使用fclose()函数,把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。
2023-06-22 23:14:191

C语言中的fclose函数该怎么用?

加个if使程序显得更加健壮,考虑一切可能发生的情况,有可能关闭文件失败.fclose(FILE* fp),传递的参数为FILE类型的指针. 一般没必要判断,但以后你到公司了,如果想写出质量很高的代码,就应该加判断.因为当你以后和一个团体一起做项目的时候,调试程序时,要考虑很多问题,你首先把这个做了,就可以减少维护和调试的工作量.现在你可能不明白,等以后参加工作了,就会理解了.
2023-06-22 23:14:292

matlab fclose函数怎么用

一般打开一个文件fid=fopen("a.txt","w")fclose(fid)%关闭文件号就关闭了文件
2023-06-22 23:14:361

在C语言中,当成功执行了文件关闭操作时,Fclose函数的返值是什么

类似这种问题去问MSDNMSDN原文:fclose returns 0 if the stream is successfully closed. return EOF to indicate an error.
2023-06-22 23:14:463

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

fopen的时候,会向操作系统申请文件句柄。单个进程能够打开的最大文件句柄数量是有限制的,打开的文件句柄数越多响应时间肯定会越慢。如果程序结束的时候不用fclose释放文件句柄,文件句柄不能被回收。
2023-06-22 23:14:543

PHP问题:fclose()函数

fclose($handle);前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:15:012

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

fclose有两个作用:1.将输出缓冲区内容写到存储设备上2.释放对应的资源如果不调用fclose,相应地,可能会造成1.对文件的更改没有被记录到磁盘上2.其他进程无法存取该文件中的一种或者多种后果。因此对应fopen地调用fclose是必要的
2023-06-22 23:15:101

fclose(fp);是什么意思

关闭fp指向的文件句柄,防止句柄泄露
2023-06-22 23:15:192

C语言:为什么fclose(fp) 是错的

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:15:401

调用fclose函数后。原有的文件指针还可以进行文件操作吗?

FILE *fp; 用fp打开文件再fclose(fp);后,应该认为,这个fp已经对原来打开文件失效,不能继续对已经关闭的文件操作,否则容易造成未知错误。如果要操作文件,需要重新打开并在fclose之前完成操作。
2023-06-22 23:15:471

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:15:573

PHP问题:fclose()函数

fclose($handle); 前加句var_dump($handle);就清楚了这个和c里的文件I/O一样的,通俗的说$handle是指针,fclose是关闭指针
2023-06-22 23:16:041

在c++中,为什么关闭文件不可以使用成员函数fclose()

fclose是一个函数名,功能是关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到内核缓冲区,并释放文件指针和有关的缓冲区。用法::intfclose(file*stream);程序示例:#include#includeintmain(void){file*fp=null;constchar*buf="0123456789";fp=fopen("dummy.fil","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=null;return0;}如果流成功关闭,fclose返回0,否则返回eof(-1)。如果流为null,而且程序可以继续执行,fclose设定errornumber给einval,并返回eof。应用:可在fclose(fp)后使用if(fclose()){perror("fclose");}来判断是否成功关闭文件,关闭失败,则fclose返回“1”并输出出错原因。
2023-06-22 23:16:131

在程序结束时,应当用fclose函数关闭已打开的文件。对不对吗

可能是你没设置好建议你看看php帮助文档,里面有介绍的
2023-06-22 23:16:215

C语言中fclose(fp)啥意思?

因为fp是在函数save_one_month中声明的,却在函数外进行fclose(fp);,编译器自然认为fp是没有定义的标识符,这引起了一连串的错误。
2023-06-22 23:16:351

C++ 如果一个进程里面用到了很多FILE,都没fclose,会怎么样

file 只是文件操作的一个句柄,占不了多少内存。fopen成功了一个文件,没有fclose,只会导致你打开的这个文件其他进程没法访问了。不信你可以写一个程序读方式打开一个文件,然后用鼠标双击,会提示文件已经被打开。
2023-06-22 23:16:532

c语言:从文件f1.txt读入一行字符,将其中所有小写字母改写为大写字母,然后输出到f2.txt中?

#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){/*主程序入口*/char st[200][80];int i=0,n,j;FILE * myf1,*myf2;/*变量声明*/myf1=fopen("f1.txt","r");/*打开文件*/myf2=fopen("f2.txt","rw+");/*打开文件*/if(myf1==NULL) return 0;if(myf2==NULL) return 0;while(fgets(st[i],80,myf1)!=NULL){i++;}for(j=0;j<i;j++)for(n=0;st[j][n];n++){if(st[i][n]>="a"&&st[i][n]<="z")st[i][n]-=32;}for(n=0;n<i;n++)fprintf(myf2,"%s ",st[n]);fclose(myf1);/*关闭文件*/fclose(myf2);/*关闭文件*/for(n=0;n<i;n++)printf("%s ",st[n]);}
2023-06-22 23:17:022

VC++中对一个文件操作,在原有的基础上加字符。fopen();fseek();我的程序不知道为什么就不行,求解

FILE *pFile=fopen("D:\3.txt","r+w");
2023-06-22 23:17:103

fopen返回NULL,从数据安全的角度,需要fclose么?为什么

是的,在使用完一个文件后应该关闭它,这应该成为一个习惯。如果不关闭文件,可能会丢失数据。因为在向文件写数据时,实现将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,他先将缓冲区中的数据输出到磁盘文件然后才释放文件指针变量,从而避免了数据丢失。关闭文件的格式是:fclose(文件指针);
2023-06-22 23:17:171

Linux下,fclose(fd)后,为什么没有释放内存,直到把该文件从磁盘上删除,使用内存数才减去文件大小?

fclose会将缓冲区数据写入磁盘,但若磁盘已满,则fclose就会失败,导致内存没有释放。判断下fclose返回值是不是EOF(-1),并检查下是不是磁盘满了。
2023-06-22 23:17:251

重复多次fclose一个打开过一次 FILE fp指针会有什么结果 并请解释

当然会出错! fclose要释放与文件相关连的缓存,释放文件号等。你对同一fp多次fclose会引起对同一内存的多次free,故而出错。
2023-06-22 23:17:322

C++。freopen,fclose函数:

代码似乎没问题,你“无法关闭”的错误现象是什么?
2023-06-22 23:17:436

为什么很多库函数名称前有f 如fscanf ,fclose,fprintf, 等等,这是什么意思

表示这些函数都是用于对文件进行操作的函数。
2023-06-22 23:18:013

C#中类似C++fopen、fclose、fwrite的函数

System.IO.FileStream~具体看你操作什么文件。C#分的很细一般的当流操作就OK在复杂xml也有专门的操作类
2023-06-22 23:18:212

关于fopen,fprintf,fclose的一个疑难杂症,百思不得其解,请高手指教!!!

跟操作系统有关。
2023-06-22 23:18:295

用fopen,fclose,fseek,ftell,fwrite,fread,这些函数写一个加密解密的代码

最简单的加密解密就是 fopen打开要加密的文件,fseek+ftell得到文件大小,之后fread读取全部数据,将数据分为2半,前后颠倒,在用fwrite清空原先文件数据 并写入颠倒后的数据 这样就实现了简单的不能再简单的加密了,反之亦然。BOOL FileChange(char * path){long length;long last;FILE * fc=fopen(path,"rb");if(NULL==fc)return 0;fseek(fc,0,SEEK_END);length=ftell(fc);if((length%2)==0){last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fclose(fw);}else{length--;last=length-(length/2);fseek(fc,0,SEEK_SET);char *jo=(char *)malloc(length-last);char *jo1=(char *)malloc(last);char *jo2=(char *)malloc(1);fread(jo,length-last,1,fc);fseek(fc,length-last,SEEK_SET);fread(jo1,last,1,fc);fread(jo2,1,1,fc);fclose(fc);FILE * fw=fopen(path,"wb+");fwrite(jo1,last,1,fw);fwrite(jo,length-last,1,fw);fwrite(jo2,1,1,fw);free(jo);free(jo1);free(jo2);fclose(fw);}return 0;}使用这个函数就可以让文件数据前后颠倒了 文件便无法运行了,再次执行这函数 数据颠倒过来后,就又可以运行了
2023-06-22 23:18:481

fclose(fp)后还需要把fp置NULL吗?

置NULL是个好习惯。为什么这么说呢,假如原来的fp=20,你已经废弃了20下次又错用了fp, 此时一定会出错吗?那可不一定,出错是命好,还有一种情况是你在其他地方申请了一个20号句柄,这样你竟然释放成功了!一处错误如果不能让它在最开始的时候暴露,就会蔓延到其他地方。你可能需要百倍的精力去找到原先BUG发生的地方。fp置NULL是个好习惯。就像开车系安全带一样。
2023-06-22 23:18:551

设fp是指向某文件的文件指针,若函数fclose(fp)操作不成功,返回值是_________。

b应该是。
2023-06-22 23:19:032

怎样把printf里的字符串直接存文件里去?

用fprintf函数FILE *fp = fopen("out.txt","w");fprintf(fp,"hello world ");int a;fprintf(fp,"%d ",a);fclose(fp)
2023-06-22 23:19:114

PHP fopen()和 file

这篇文章主要介绍了PHP fopen()和 file_get_contents()应用与差异,需要的朋友可以参考下代码如下:$file=fopen("11.txt","r")or exit("Unable to open file!");//fopen打开文件,如果不存在就显示打不开。$filesize =filesize("11.txt");//计算文件大小echo fread($file,$filesize);//读取文件fclose($file);//关闭文件fopen()打开文件例子,fclose()用不用在页面上都没有体现,但是如果不用fclose()的话,被打开的文件会一直占用资源。fopen() 打开网址例子:代码如下:$web="$fp=fopen($web,"r");if($fp){while(!feof($fp)){echo fgets($fp);}}feof()检查文件是否到末端 ,到末端返回1,没有到返回0;fgets()是逐行读取。file_get_contents()例子;代码如下:$web ="$fcontent=file_get_contents($web);echo $fcontent;显然file_get_contents()更为简单。而且在实验过程中我发现,如果在 $web =""中 不加www. 会直接跳转,加www.会在本页加载
2023-06-22 23:19:251

matlab中fprintf,多次fopen,fclose,数据会覆盖,怎么让数据接着写下去?

把第二个fopen里的wt换成a即可关于a w r +之类的意义和c语言里是一样的
2023-06-22 23:19:333

C语言文件关闭函数fclose(文件指针)是什么?

第一题1、13,4,42、97 ,01001100, 0x393、因为程序中涉及到数字与字符的处理,字符用ASCII码表示,计算方便。4、(1)执行流程首先输入一个字符串把字符串地址赋值给指针变量p,调用jisuan函数计算输入字符串中字母表中字符个数,0-9出现次数,其余字符出现次数,将得到的结果输出。(2)void jisuan(char *str){函数体中内容复制进来。****}
2023-06-22 23:19:532

matlab fclose函数怎么用

fclose一般与fopen成对使用。在matlab中打开文件要使用fopen函数。最简单的例子:fileID = fopen(filename)然后就会生成一个fileID的值,这个值将标记这个文件,对文件的读写操作都是通过这个值来进行的。当不需要对文件进行操作之后,就可以使用fclose函数对这个文件进行关闭。简单的例子如下:fclose(fileID)说明:fclose的matlab帮助文档解释是:关闭一个打开的fileID的文件,fileID是一个通过fopen函数获取到的整数。
2023-06-22 23:20:021

函数fclose()的功能是什么

 函数名: fclose  功 能: 关闭一个流。注意:使用fclose函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。  用 法: int fclose(FILE *stream);  程序例:  #include <string.h>  #include <stdio.h>  int main(void)  {  FILE *fp;  char buf[11] = "0123456789";  /* create a file containing 10 bytes */  fp = fopen("DUMMY.FIL", "w");  fwrite(&buf, strlen(buf), 1, fp);  /* close the file */  fclose(fp);  return 0;  }  如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。  如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:20:101

fopen和fclose函数的返回值是多少?

fopen()文件顺利打开后,返回指向该流的文件指针,如果文件打开失败,则返回NULL,并将错误代码存储在errno中。fclose()成功关闭可返回0,错误返回EOF并把错误存储在errno中。
2023-06-22 23:20:182

当顺利执行了文件关闭操作文件时fclose函数的返回值是什么

0
2023-06-22 23:20:392

C语言中,用fopen打开程序了程序,结束时为什么要用fclose关闭?

简单点说就是:如果你家里门开了,又不关贼可能会进来。
2023-06-22 23:20:462

求解:verilog语言中$fopen $fdisplayh $fclose三个函数的用法

1 文件可以用系统任务$fopen打开。用法有两种$fopen("<文件名>");<文件句柄>=$fopen("<文件名>");2$fdisplay是将数据写入制定的文件中。例如H1=$fopen("文件名");%取一个文件的句柄$fdisplay("数据");%将数据写入文件3同上当你想关闭文件的时候就使用fclosefclose(<文件句柄>);%这里的文件句柄就是在$fopen中获得的文件句柄
2023-06-22 23:20:531

C语言子函数中fopen文件后必须要fclose吗

一般都把fopen和fclose放到一个函数里,以免忘记fclose,你可以把你子函数的fopen放到你的主函数里面啊
2023-06-22 23:21:046

C语言文件函数中exit(0)与fclose(fp)有什么区别??

exit(0)是退出当前程序。fclose(fp)是关闭文件指针fp所打开的文件。
2023-06-22 23:21:321

fclose 失败,错误代码 Bad file number 是什么意思

函数名编辑fclose()2功 能编辑关闭一个流。注意:使用fclose()函数就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。3用 法编辑:int fclose(FILE *stream);4程序示例编辑#include<string.h>#include<stdio.h>intmain(void){FILE*fp=NULL;constchar*buf="0123456789";fp=fopen("DUMMY.FIL","w");/*创建一个包含10个字节的文件*/fwrite(buf,strlen(buf),1,fp);/*将buf内容写入到文件中*/fclose(fp);/*关闭文件*/fp=NULL;return0;}如果流成功关闭,fclose 返回 0,否则返回EOF(-1)。如果流为NULL,而且程序可以继续执行,fclose设定error number给EINVAL,并返回EOF。
2023-06-22 23:21:391

fclose的时候会立即把文件写入硬盘么

是的。C语言fclose是就执行了修改
2023-06-22 23:21:461

fclose关闭的到底是C标准库的源,还是系统的fd

fclose函数为C语言标准库函数,用来关闭一个已打开的文件。 该函数在stdio.h中声明,原型为: int fclose(FILE *fp); 当fclose被调用时,一个打开的文件(以文件指针fp标识)会被关闭,关闭后,无法再对fp执行读写操作。 如果关闭成功,返回0,否则返回负值。 C语言文件操作的标准流程为 1 fopen打开文件; 2 通过各种读写函数,读写文件; 3 所有操作结束后,调用fclose关闭文件。
2023-06-22 23:21:541

C语言中使用fopen在fclose关闭文件后,如何再次打开文件?

fclose之后再fopen就行了。
2023-06-22 23:22:011

一道C语言文件题(急)

#include <stdio.h> void main() { FILE *fp; int i,j,k,x,y; scanf("%d%d",&i,&j); //输入两个数字给ijfp=fopen("t.dat","w");//以写的格式打开文件名为“t.dat”的文件 fprintf(fp,"%d ",i); //将输入的数字i写入到文件“t.dat”中if (i<j) k=j; //如果i小于j那么k=jelse if(i>j) k=i; //如果i大于j那么k=ielse k=i+j; //i==j时,k=i+jfprintf(fp,"%d ",k); //把k的值写入到文件“t.dat”中fclose(fp); //关闭文件“t.dat”fp=fopen("t.dat","r"); //以读的方式打开文件“t.dat”fscanf(fp,"%d%d",&x,&y); //读取两个数字分别赋值给x,yprintf("x=%d,y=%d ",x,y); //将x,y标准输出到屏幕上fclose(fp); //关闭文件} 由此可以看出该程序的功能是,首先输入两个数据,把第一个数据存入文件中,如果第一个数据大于第二个数据,那么把第二个文件存入文件中,如果第一个数据小于第二个数据,则再把第一个数据存入文件中,如果他们相等,那么存入的是这个两个数据的和最后在屏幕上输出存入文件的数据
2023-06-22 23:22:081

19. fopen、fclose、feof、fputc、fgetc、fread、fwrite、ftell、fseek函数的用法。

clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include<stdio.h>定义函数 void clearerr(FILE * stream);函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。返回值 fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf表头文件 #include<stdio.h>定义函数 int fclose(FILE * stream);函数说明 fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。返回值 若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。错误代码 EBADF表示参数stream非已打开的文件。范例 请参考fopen()。fdopen(将文件描述词转为文件指针) 相关函数 fopen,open,fclose表头文件 #include<stdio.h>定义函数 FILE * fdopen(int fildes,const char * mode);函数说明 fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。返回值 转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。范例 #include<stdio.h>main(){ FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s ”,”hello!”); fclose(fp);}执行 hello!feof(检查文件流是否读到了文件尾) 相关函数 fopen,fgetc,fgets,fread表头文件 #include<stdio.h>定义函数 int feof(FILE * stream);函数说明 feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。返回值 返回非零值代表已到达文件尾。fflush(更新缓冲区) 相关函数 write,fopen,fclose,setbuf表头文件 #include<stdio.h>定义函数 int fflush(FILE* stream);函数说明 fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。返回值 成功返回0,失败返回EOF,错误代码存于errno中。错误代码 EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。fgetc(由文件中读取一个字符) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 nt fgetc(FILE * stream);函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。范例 #include<stdio.h>main(){ FILE *fp; int c; fp=fopen(“exist”,”r”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp);}fgets(由文件中读取一字符串) 相关函数 open,fread,fscanf,getc表头文件 include<stdio.h>定义函数 har * fgets(char * s,int size,FILE * stream);函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。范例 #include<stdio.h>main(){ char s[80]; fputs(fgets(s,80,stdin),stdout);}执行 this is a test /*输入*/this is a test /*输出*/fileno(返回文件流所使用的文件描述词)相关函数 open,fopen表头文件 #include<stdio.h>定义函数 int fileno(FILE * stream);函数说明 fileno()用来取得参数stream指定的文件流所使用的文件描述词。返回值 返回文件描述词。范例 #include<stdio.h>main(){ FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d ”,fd); fclose(fp);}执行 fd=3fopen(打开文件) 相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“noexist”,”a+”); if(fp= =NULL) return; fclose(fp);}fputc(将一指定字符写入文件流中) 相关函数 fopen,fwrite,fscanf,putc表头文件 #include<stdio.h>定义函数 int fputc(int c,FILE * stream);函数说明 fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中。返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。范例 #include<stdio.h>main(){ FILE * fp; char a[26]=”abcdefghijklmnopqrstuvwxyz”; int i; fp= fopen(“noexist”,”w”); for(i=0;i<26;i++) fputc(a[i],fp); fclose(fp);}fputs(将一指定的字符串写入文件内) 相关函数 fopen,fwrite,fscanf,fputc,putc表头文件 #include<stdio.h>定义函数 int fputs(const char * s,FILE * stream);函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。范例 请参考fgets()。 fread(从文件流读取数据) 相关函数 fopen,fwrite,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字符数以参数size*nmemb来决定。Fread()会返回实际读取到的nmemb数目,如果此值比参数 nmemb 来得小,则代表可能读到了文件尾或有错误发生,这时必须用feof()或ferror()来决定发生什么情况。返回值 返回实际读取到的nmemb数目。附加说明 范例 #include<stdio.h>#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; int i; stream = fopen(“/tmp/fwrite”,”r”); fread(s,sizeof(struct test),nmemb,stream); fclose(stream); for(i=0;i<nmemb;i++) printf(“name[%d]=%-20s:size[%d]=%d ”,i,s[i].name,i,s[i].size);}执行 name[0]=Linux! size[0]=6name[1]=FreeBSD! size[1]=8name[2]=Windows2000 size[2]=11freopen(打开文件) 相关函数 fopen,fclose表头文件 #include<stdio.h>定义函数 FILE * freopen(const char * path,const char * mode,FILE * stream);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode请参考fopen()说明。参数stream为已打开的文件指针。Freopen()会将原stream所打开的文件流关闭,然后打开参数path的文件。返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。范例 #include<stdio.h>main(){ FILE * fp; fp=fopen(“/etc/passwd”,”r”); fp=freopen(“/etc/group”,”r”,fp); fclose(fp);}fseek(移动文件流的读写位置) 相关函数 rewind,ftell,fgetpos,fsetpos,lseek表头文件 #include<stdio.h>定义函数 int fseek(FILE * stream,long offset,int whence);函数说明 fseek()用来移动文件流的读写位置。参数stream为已打开的文件指针,参数offset为根据参数whence来移动读写位置的位移数。参数 whence为下列其中一种:SEEK_SET从距文件开头offset位移量为新的读写位置。SEEK_CUR 以目前的读写位置往后增加offset个位移量。SEEK_END将读写位置指向文件尾后再增加offset个位移量。当whence值为SEEK_CUR 或SEEK_END时,参数offset允许负值的出现。下列是较特别的使用方式:1) 欲将读写位置移动到文件开头时:fseek(FILE *stream,0,SEEK_SET);2) 欲将读写位置移动到文件尾时:fseek(FILE *stream,0,0SEEK_END);返回值 当调用成功时则返回0,若有错误则返回-1,errno会存放错误代码。附加说明 fseek()不像lseek()会返回读写位置,因此必须使用ftell()来取得目前读写的位置。范例 #include<stdio.h>main(){ FILE * stream; long offset; fpos_t pos; stream=fopen(“/etc/passwd”,”r”); fseek(stream,5,SEEK_SET); printf(“offset=%d ”,ftell(stream)); rewind(stream); fgetpos(stream,&pos); printf(“offset=%d ”,pos); pos=10; fsetpos(stream,&pos); printf(“offset = %d ”,ftell(stream)); fclose(stream);}执行 offset = 5offset =0offset=10ftell(取得文件流的读取位置) 相关函数 fseek,rewind,fgetpos,fsetpos表头文件 #include<stdio.h>定义函数 long ftell(FILE * stream);函数说明 ftell()用来取得文件流目前的读写位置。参数stream为已打开的文件指针。返回值 当调用成功时则返回目前的读写位置,若有错误则返回-1,errno会存放错误代码。错误代码 EBADF 参数stream无效或可移动读写位置的文件流。范例 参考fseek()。fwrite(将数据写至文件流) 相关函数 fopen,fread,fseek,fscanf表头文件 #include<stdio.h>定义函数 size_t fwrite(const void * ptr,size_t size,size_t nmemb,FILE * stream);函数说明 fwrite()用来将数据写入文件流中。参数stream为已打开的文件指针,参数ptr 指向欲写入的数据地址,总共写入的字符数以参数size*nmemb来决定。Fwrite()会返回实际写入的nmemb数目。返回值 返回实际写入的nmemb数目。范例 #include<stdio.h>#define set_s (x,y) {strcoy(s[x].name,y);s[x].size=strlen(y);}#define nmemb 3struct test{ char name[20]; int size;}s[nmemb];main(){ FILE * stream; set_s(0,”Linux!”); set_s(1,”FreeBSD!”); set_s(2,”Windows2000.”); stream=fopen(“/tmp/fwrite”,”w”); fwrite(s,sizeof(struct test),nmemb,stream); fclose(stream);}执行 参考fread()。
2023-06-22 23:22:161

freopen 需要fclose吗 能给我些依据吗

当然需要,所有的open都会返回一个句柄(HANDLE),这个句柄是个系统资源,如果你反复打开不关闭,会造成系统崩溃。不过程序运行结束的时侯会自动关闭所有打开的资源。
2023-06-22 23:22:301

应用缓冲文件系统对文件进行读写操作,关闭文件的函数名为什么

fclose()
2023-06-22 23:22:492