在c语言sizeof中,fseek(fp,sizeof(int)*3,0)是什么意思

50、有以下程序(提示:程序中fseek (fp, -2L*sizeof(int), SEEK_END ); 语句的作用是使位置指针从文件尾_百度知道
50、有以下程序(提示:程序中fseek (fp, -2L*sizeof(int), SEEK_END ); 语句的作用是使位置指针从文件尾
.C语言的..
fp=fopen(&quot,fp);
fclose(fp);
fread(&b,sizeof(int);stdio.h&rb&n&quot,b、有以下程序(提示;
printf(&/
int i,2;).SEEK_END);,a[4]={1; 语句的作用是使位置指针从文件尾向前移2*sizeof(int)字节)
#include &
FILE *4;i++)
fwrite(&a[i];
fclose(fp),sizeof(int):程序中fseek (
fp=fopen(&,&,fp););
for(i=0;%d&#92,4},1;*从文件中读取sizeof(int)字节的数据到变量b中*&#47.dat&quot50,1;
fseek(fp, SEEK_END );i&lt,b),3;data,-2L*sizeof(int).dat&quot,&quot, -2L*sizeof(int)
提问者采纳
就是把指针移到距离文件结尾
然后读取 (
型数据被分配4 个字节)
那么执行fread(&b,sizeof(int),fp),-2L*sizeof(int)fseek(fp,1.SEEK_END)
提问者评价
其他类似问题
为您推荐:
fseek的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁君,已阅读到文档的结尾了呢~~
图文并茂!真好!
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
全国计算机等级考试二级C语言历年真题讲解
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口&1、在C语言中,没有输入输出语句,对文件的读写都是用库函数来实现的。因此,使用这些库函数时,要包含头文件stdio.h
&1、在中,没有输入输出语句,对的读写都是用来实现的。因此,这些库函数时,要包含头文件stdio.h
&&& 2、每个末有一结束标志EOF(-1)。因为字符的码不可能出现-1,所以EOF定以为-1是合适 的;但对二进制文件来说,读入的某个字节的值可能就是-1,所以用EOF作为文件结束标志。为解决这个问题,ANSI C提供了一个feof函数来文件是否真的结束。这种也适用于文本文件。
&&& 3、在C语言中提供了多种文件读写的函数:
&字符读写函数 :fgetc和fputc(为了书写方便,将fputc和fgetc定义为宏名putc和getc)
&读写函数:fgets和fputs
&数据块读写函数:freed和fwrite
&格式化读写函数:fscanf和fprinf
&&& 4、fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符str中。从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'。如果在读完n-1个字符之前遇到换行符或EOF,读入即结束,这一点一定注意,在用fgets()读入文件内容时,由于上述缘故,会只读出文件的一行内容。
&&& 5、把一个文本文件读入时,要将ASCII码成二进制码, 而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换。
&&& 6、文件指针和文件内部的位置指针:
文件指针是指向整个文件的,须在程序中定义说明,只要不重新赋值,文件指针的值是不变的。文件内部的位置指针用以指示文件内部的当前读写位置,在文件打开时,该指针总是指向文件的第一个字节。每读写一次,文件内部的位置指针均向后,它不需在程序中定义说明,而是由系统自动的。
&&& 7、 rewind()的使用:
&&&&&&& 我们应该注意在对一个文件写入一些内容后,此时文件内部的位置指针指向文件末尾;当你接着要从这个文件中读取刚写入的数据时,要先将位置指针移到文件开始的地方。此即为 rewind()的作用:是位置指针重新返回文件开头。
&&& 8、fread和fwrite函数一般用于二进制文件的输入输出,因为它们是按数据块的长度来处理输入输出的,在字符发生转换的情况下很可能出现和设想不符的情况。
&&& 9、fscanf 函数和fprintf函数的读写对象不是和,而是磁盘文件,这是它们于scanf和printf的。用fprintf和fscanf函数对磁盘文件读写,简单易懂,但由于是对磁盘文件进行操作,在输入时要将ASCII码转换为二进制形式,输出时又要将二进制文件形式转换成字符,花费时间较多。因此,在内存和磁盘频繁交换数据的情况下,最好不用这两个函数。
&&& 10、文件的读写(文件的定位):使用特定函数,移动文件内部的位置指针到需要读写的位置,再进行读写。
&&& rewind(文件指针); 它的是把文件内部的位置指针移到文件首。
&&& fseek函数: fseek(文件指针,位移量,起始点),fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往的位置会出现。
所谓&文件&是指一组相关数据的有序集合。 这个数据集有一个名称,叫做文件名。 实际上在前面的各章中我们已经多次了文件,例如源文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来。从不同的角度可对文件作不同的。从的角度看,文件可分为普通文件和设备文件两种。
  普通文件是指驻留在磁盘或外部介质上的一个有序数据集,是源文件、目标文件、可执行程序; 也可以是一组待输入处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、 可执行程序可以称作程序文件,对输入输出数据可称作数据文件。
  设备文件是指与相联的各种外部设备,如显示器、、键盘等。在中, 把外部设备也看作是一个文件来进行,把它们的输入、输出等同于对磁盘文件的读和写。 通常把显示器定义为标准输出文件, 一般情况下在上显示有关信息就是向标准输出文件输出。如前面经常使用的printf,putchar 函数就是这类输出。键盘通常被指定标准的输入文件, 从键盘上输入就意味着从标准输入文件上输入数据。scanf,getchar函数就属于这类输入。
从文件的方式来看,文件可分为ASCII码文件和二进制码文件两种。
ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:
ASC码:  11
&     &    &    &
十进制码: 5     6    7    8 共占用4个字节。ASCII码文件可在屏幕上按字符显示, 例如源程序文件就是ASCII文件,用TYPE可显示文件的内容。 由于是按字符显示,因此能读懂文件内容。
  二进制文件是按二进制的编码方式来存放文件的。 例如, 数5678的存储形式为: 01110只占二个字节。二进制文件虽然也可在屏幕上显示, 但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。 输入输出字符流的开始和结束只由程序控制而不受物理(如回车符)的控制。 因此也把这种文件称作&流式文件&。
  本章讨论流式文件的打开、关闭、读、写、 定位等各种操作。文件指针在C语言中用一个指针变量指向一个文件, 这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。 定义说明文件指针的一般形式为: FILE* 指针变量; 其中FILE应为大写,它实际上是由系统定义的一个, 该结构中含有文件名、文件状态和文件当前位置等信息。 在编写源程序时不必关心FILE结构的。 例如:FILE *fp; 表示fp是指向FILE结构的指针变量,通过fp 即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件, 实施对文件的操作。上也笼统地把fp称为指向一个文件的指针。文件的打开与关闭文件在进行读写操作之前要先打开,使用完毕要关闭。 所谓打开文件,实际上是建立文件的各种有关信息, 并使文件指针指向该文件,以便进行其它操作。关闭文件则断开指针与文件之间的联系,也就禁止再对该文件进行操作。
在C语言中,文件操作都是由库函数来完成的。 在本章内将介绍主要的文件操作函数。
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()。
返回值 转换成功时返回指向该流的文件指针。失败则返回,并把错误代码存在errno中。
#include&stdio.h&
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&
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&
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&
fp=fopen(&/etc/passwd&,&r&);
fd=fileno(fp);
printf(&fd=%d
fclose(fp);
fopen(打开文件)
相关函数 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 字符用来告诉函数库打开的文件为二进制文件,而非纯文件。不过在PX系统,包含都会忽略该字符。由fopen()所建立的新文件会具 有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。
返回值 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。
附加说明 一般而言,开文件后会作一些文件读取或写入的动作,若开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。
#include&stdio.h&
fp=fopen(&noexist&,&a+&);
if(fp= =NULL)
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&
char a[26]=&abcdefghijklmnopqrstuvwxyz&;
fp= fopen(&noexist&,&w&);
for(i=0;i&26;i++)
fputc(a,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 3
struct test
char name[20];
}s[nmemb];
int main(){
stream = fopen(&/tmp/fwrite&,&r&);
fread(s,sizeof(struct test),nmemb,stream);
fclose(stream);
for(i=0;i&i++)
printf(&name[%d]=%-20s:size[%d]=%d
&,i,s.name,i,s.size);
name[0]=Linux! size[0]=6
name[1]=FreeBSD! size[1]=8
name[2]=2000 size[2]=11
freopen(打开文件)
相关函数 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&
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_从距文件开头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&
stream=fopen(&/etc/passwd&,&r&);
fseek(stream,5,SEEK_SET);
printf(&offset=%d
&,ftell(stream));
rewind(stream);
fgetpos(stream,&pos);
printf(&offset=%d
fsetpos(stream,&pos);
printf(&offset = %d
&,ftell(stream));
fclose(stream);
执行 offset = 5
ftell(取得文件流的读取位置)
相关函数 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 3
struct test
char name[20];
}s[nmemb];
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()。
getc(由文件中读取一个字符)
相关函数 read,fopen,fread,fgetc
表头文件 #include&stdio.h&
定义函数 int getc(FILE * stream);
函数说明 getc()用来从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。虽然getc()与fgetc()作用相同,但getc()为宏定义,非真正的函数调用。
返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。
范例 参考fgetc()。
getchar(由标准输入设备内读进一字符)
相关函数 fopen,fread,fscanf,getc
表头文件 #include&stdio.h&
定义函数 int getchar(void);
函数说明 getchar()用来从标准输入设备中读取一个字符。然后将该字符从unsigned char转换成int后返回。
返回值 getchar()会返回读取到的字符,若返回EOF则表示有错误发生。
附加说明 getchar()非真正函数,而是getc(stdin)宏定义。
#include&stdio.h&
for(i=0li&5;i++)
c=getchar();
putchar(c);
执行 1234 /*输入*/
1234 /*输出*/
gets(由标准输入设备内读进一字符串)
相关函数 fopen,fread,fscanf,fgets
表头文件 #include&stdio.h&
定义函数 char * gets(char *s);
函数说明 gets()用来从标准设备读入字符并存到参数s所指的内存空间,直到出现换行字符或读到文件尾为止,最后加上NULL作为字符串结束。
返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。
附加说明 由于gets()无法知道字符串s的大小,必须遇到换行字符或文件尾才会结束输入,因此容易造成缓冲溢出的性问题。建议使用fgets()取代。
范例 参考fgets()
mktemp(产生唯一的临时文件名)
相关函数 tmpfile
表头文件 #include&stdlib.h&
定义函数 char * mktemp(char * template);
函数说明 mktemp()用来产生唯一的临时文件名。参数template所指的文件名称字符串中最后六个字符必须是XXXXXX。产生后的文件名会借字符串指针返回。
返回值 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
附加说明 参数template所指的文件名称字符串必须声明为数组,如:
char template[ ]=&template-XXXXXX&;
不可用char * template=&template-XXXXXX&;
#include&stdlib.h&
char template[ ]=&template-XXXXXX&;
mktemp(template);
printf(&template=%s
&,template);
putc(将一指定字符写入文件中)
相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include&stdio.h&
定义函数 int putc(int c,FILE * stream);
函数说明 putc()会将参数c转为unsigned char后写入参数stream指定的文件中。虽然putc()与fputc()作用相同,但putc()为宏定义,非真正的函数调用。
返回值 putc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。
范例 参考fputc()。
putchar(将指定的字符写到标准输出设备)
相关函数 fopen,fwrite,fscanf,fputc
表头文件 #include&stdio.h&
定义函数 int putchar (int c);
函数说明 putchar()用来将参数c字符写到标准输出设备。
返回值 putchar()会返回输出成功的字符,即参数c。若返回EOF则代表输出失败。
附加说明 putchar()非真正函数,而是putc(c,stdout)宏定义。
范例 参考getchar()。
rewind(重设文件流的读写位置为文件开头)
相关函数 fseek,ftell,fgetpos,fsetpos
表头文件 #include&stdio.h&
定义函数 void rewind(FILE * stream);
函数说明 rewind()用来把文件流的读写位置移至文件开头。参数stream为已打开的文件指针。此函数相当于调用fseek(stream,0,SEEK_SET)。
范例 参考fseek()
setbuf(设置文件流的缓冲区)
相关函数 setbuffer,setlinebuf,setvbuf
表头文件 #include&stdio.h&
定义函数 void setbuf(FILE * stream,char * buf);
函 数说明 在打开文件流后,读取内容之前,调用setbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地 址。如果参数buf为NULL指针,则为无缓冲IO。Setbuf()相当于调用:setvbuf(stream,buf,buf?_IOFBF: _IONBF,BUFSIZ)
setbuffer(设置文件流的缓冲区)
相关函数 setlinebuf,setbuf,setvbuf
表头文件 #include&stdio.h&
定义函数 void setbuffer(FILE * stream,char * buf,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setbuffer()可用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小。
setlinebuf(设置文件流为线性缓冲区)
相关函数 setbuffer,setbuf,setvbuf
表头文件 #include&stdio.h&
定义函数 void setlinebuf(FILE * stream);
函数说明 setlinebuf()用来设置文件流以换行为依据的无缓冲IO。相当于调用:setvbuf(stream,(char * )NULL,_IOLBF,0);请参考setvbuf()。
setvbuf(设置文件流的缓冲区)
相关函数 setbuffer,setlinebuf,setbuf
表头文件 #include&stdio.h&
定义函数 int setvbuf(FILE * stream,char * buf,int mode,size_t size);
函数说明 在打开文件流后,读取内容之前,调用setvbuf()可以用来设置文件流的缓冲区。参数stream为指定的文件流,参数buf指向自定的缓冲区起始地址,参数size为缓冲区大小,参数mode有下列几种
_IONBF 无缓冲IO
_IOLBF 以换行为依据的无缓冲IO
_IOFBF 完全无缓冲IO。如果参数buf为NULL指针,则为无缓冲IO。
ungetc(将指定字符写回文件流中)
相关函数 fputc,getchar,getc
表头文件 #include&stdio.h&
定义函数 int ungetc(int c,FILE * stream);
函数说明 ungetc()将参数c字符写回参数stream所指定的文件流。这个写回的字符会由下一个读取文件流的函数取得。
返回值 成功则返回c 字符,若有错误则返回EOF。
<input type="hidden" name="content" value=" " />
最新图片文章详解C语言中fseek函数和ftell函数的使用方法
作者:YoferZhang
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C语言中fseek函数和ftell函数的使用方法,两个函数分别用于设置和返回文件指针stream的位置,需要的朋友可以参考下
fseek函数:
int fseek(FILE * _File, long _Offset, int _Origin);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。
超出文件末尾位置,还是返回0。往回偏移超出首位置,还是返回0,小心使用。
第一个参数stream为文件指针。
第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移。
第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、SEEK_END或SEEK_SET。
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾
#include&stdio.h&
#define N 5
typedef struct student{
char name[10];
float score[3];
void fun(char*filename,STU n)
fp=fopen(filename,"rb+");
fseek(fp,-1L*sizeof(STU),SEEK_END);
fwrite(&n,sizeof(STU),1,fp);
fclose(fp);
int main()/*修改覆盖最后一个学生数据*/
STU t[N]={
{10001,"MaChao",91,92,77},
{10002,"CaoKai",75,60,88},
{10003,"LiSi",85,70,78},
{10004,"FangFang",90,82,87},
{10005,"ZhangSan",95,80,88}
STU n={10006,"ZhaoSi",55,70,68},ss[N];
int i,j;FILE*
fp=fopen("student.dat","wb");
fwrite(t,sizeof(STU),N,fp);
fclose(fp);
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
printf("\nThe original data:\n\n");
for(j=0;j&N;j++)
printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
for(i=0;i&3;i++)
printf("%6.2f",ss[j].score[i]);
printf("\n");
fun("student.dat",n);
printf("\nThe data after modifing:\n\n");
fp=fopen("student.dat","rb");
fread(ss,sizeof(STU),N,fp);
fclose(fp);
for(j=0;j&N;j++)
printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);
for(i=0;i&3;i++)
printf("%6.2f",ss[j].score[i]);
printf("\n");
ftell函数用于得到文件位置指针当前位置相对与文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。
long len = ftell(fp)
#include &stdio.h&
int main( void )
stream = fopen( "MYFILE.TXT", "w+" );
fprintf( stream, "This is a test" );
printf( "The file pointer is at byte \
%ld\n", ftell( stream ) );
fclose( stream );
return(0);
ftell一般用于读取文件的长度,下面补充一个例子,读取文本文件中的内容:
#include &stdio.h&
#include &stdlib.h&
int main()
/* 以只读方式打开文件 */
if ( (fp = fopen( "1.txt", "r" ) ) == NULL )
printf( "\nfile open error\n" );
exit( 0 );
fseek( fp, 0L, SEEK_END );
/* 定位到文件末尾 */
flen = ftell( fp );
/* 得到文件大小 */
p = (char *) malloc( flen + 1 ); /* 根据文件大小动态分配内存空间 */
if ( p == NULL )
fclose( fp );
return(0);
fseek( fp, 0L, SEEK_SET );
/* 定位到文件开头 */
fread( p, flen, 1, fp );
/* 一次性读取全部文件内容 */
p[flen] = '\0';
/* 字符串结束标志 */
printf( "%s", p );
fclose( fp );
free( p );
return(0);
#include &stdio.h&
long f1; /* 此处将f1设置为long 可以读取更长的文件 */
myf = fopen( "1.txt", "rb" );
fseek( myf, 0, SEEK_END );
f1 = ftell( myf );
fclose( myf );
printf( “ % d \ n ”, f1 );
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 c语言中fseek 的文章

 

随机推荐