网上有关“c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用”话题很是火热,小编也是针对c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。
fread:是读取数据
fwrite:是写入数据
1.函数功能
用来读写一个数据块。
2.一般调用形式
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
3.说明
(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。
(2)size:要读写的字节数;
(3)count:要进行读写多少个size字节的数据项;
(4)fp:文件型指针。
注意:1
完成次写操(fwrite())作后必须关闭流(fclose());
2
完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(file
*
fp)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出;
3
fprintf()
按格式输入到流,其原型是int
fprintf(file
*stream,
const
char
*format[,
argument,
...]);其用法和printf()相同,不过不是写到控制台,而是写到流罢了。注意的是返回值为此次操作写入到文件的字节数。如int
c
=
fprintf(fp,
"%s
%s
%d
%f",
str1,str2,
a,
b)
;str1:10字节;str2:
10字节;a:2字节;b:8字节,c为33,因为写入时不同的数据间自动加入一个空格。
4.fscanf
和
scanf
相似
:当能正常读入数据时,
fscanf
返回读入数据的个数,否则返回
eof
求教c语言中fgets的用法
文件
文件的分类:
按照用户角度分:
①设备文件:如显示器(printf)标准输出文件;键盘(scanf)标准输入文件
②普通文件:存放在磁等介质上的文件
按照文件的逻辑结构上分:
①记录文件(有定长记录、不定长记录两种)
②流式文件(由字符数据顺序组成如c语言程序)
按照文件的编码方式:
①文本文件(又称ascii文件,每个字节存放一个ascii码)(.c、.cpp、.h、.txt、.ini、)(常见的有五种)
②二进制文件(binary file)
文件操作函数:
一、文件的打开:文件指针名=fopen(“path\文件名”,“打开文件方式”)
“文件打开方式”:
rt-只读打开文本文件
wt-只写打开文本文件
at-追加打开文本文件,并在末尾写数据。
rb-只读打开二进制文件
wb-只写打开二进制文件
ab-追加打开二进制文件,并在末尾写数据。
rt+-读写打开文本文件,允许读写
wt+-读写打开或建立一个文本文件,允许读写。
at+-读写打开一个文本文件,允许读或在文件末尾追加数据。
rb+-读写打开二进制文件,允许读写
wb+-读写打开或建立一个二进制文件,允许读写。
ab+-读写打开一个二进制文件,允许读或在文件末尾追加数据。
r+w:可读写文件(具体是二进制文件还是文本文件要看打开文件的扩展名而定)
例如:fp=fopen(“C.dat”,“w+b”)
文件打开模式只有r、w、a、t、b、+、这六个字符拼成。
w:用w打开的文件只能向该文件写入数据(更准确是建立一个新的文件)(即将 信息从程序写入磁盘中)
a:用a打开对我文件只能向已存在的文件中追加信息
①对于文本文件应注意:从程序中读入内存时,要将ASCII码转换成二进制码;而 把文件以文本形式写入磁盘时,要将二进制码转换为ASCII码。
②fopen函数将返回一个文本文件结构的指针(该文件不存在时,返回NULL)
文件的关闭:fclose(fp);(作用强制性将存放在缓中的未满的数据写入到磁盘中, 然后释放文件指针,使其真正写入磁盘中)
fclose(fp);关闭成功时返回0,失败时返回EOR
文件的读写:
读字符函数— fgetc()
调用格式:字符变量=fgetc(文件指针(fp));
函数说明:
读字符时,文件必须以“读”或者“读写”的方式打开
读取的结果也可以不向字符变量赋值。例如fgetc(fp)
每读一个字符文件内部指针向前移动一个字符(文件内部指针不是文件指针,文件内部直镇不需要程序中定义说明由系统自动设置)
返回值:fgetc(fp):成功时函数返回读入的一个字符,若读到文件尾时或者出错时,返回值为“EOF”。
写字符函数—fputc()
调用格式:fputc(字符量(常量或者变量),文件指针(fp))
函数说明:
写字符时,文件可以用“写”“读写”“追加”的方式打开文件
写或者是读写的方式打开文件时,原有的内容将会被清除,从文件首部开始写入字符;若以追加的方式打开文件时,将在文件末尾开始写入字符。
函数的返回值:写入成功时,返回写入的字符;失败时,则会
返回“EOF”
每写入一个字符,“文件内部位置指针”向后移动一个字符
读字符串函数—fgets()
调用格式:fgets(字符数组名,n,文件指针(fp))
函数说明:
N是一个正整数,表示从文件中读取的字符串不超过N-1个字符。
读入最后一个字符后加上字符串结束标志'\0'.
读取过程中,遇到换行或者文件结束标志“EOF”(end of file)时,读取字符串结束。
写字符串函数—fputs()
调用格式:fputs(字符串量,文件指针)(字符串量,即可是字符串变量(c中为字符数组),由可是字符串常量)
函数说明:无
///////////////////////////////////////////////////////////////--这部分有点小问题(程序运行不了)
读数据块函数—fread()
调用格式:fread(p,size,n,fp)
函数说明:
P:指向输入/输出数据块的首地址的指针
Size:某类型数据存储空间的字节数(数据项大小)
N:此次从文件中读取的数据项数
Fp:文件指针变量
写数据块函数—frite()
调用格式:fread (p,size,n,fp)
函数说明:
P:指向输入/输出数据块的首地址的指针
Size:某类型数据存储空间的字节数(数据项大小)
N:此次从文件中读取的数据项数
Fp:文件指针变量
注意:fread、fwite函数在调用成功时,函数返回值为n的值,即输出的项数;如果失败,则返回(0)。
==========================================================MR_COMPUTER
从流中读一行或指定个字符,原型是char*fgets(char*s,intn,FILE*stream);从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。
*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针fgets的返回值是个指针,*fgets(buffer,100,stdin)就是取返回指针所指向地址的第一个字符,fgets的返回值是char*.要是输入一串字符,返回的第一字符一定不是\n如果要是一个空行,第一个一定是\n,所以会推出循环,如果while中的两个条件都满足,就会进入循环继续计算。
扩展资料:
一、函数原型是:char *fgets(char *s, int n, FILE *stream);
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize-1个字符,则读完该行就结束。
如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。
函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
二、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。
三、功能:
1、《UNIX 环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。
2、初入门者,大多数是在WINDOWS下,使用VS进行练习的。此环境下,对注意1中的情况进行测试,并不能看到案例中所描述的情景,因为具体的实现不同。
stream文件流指针体指向文件内容地址的偏移原则
例:
如果一个文件的当前位置的文本如下
Love, I Have
Since you can do it.
如果用fgets(str1,6,file1);去读取
则执行后str1 = "Love," ,读取了6-1=5个字符
这个时候再执行fgets(str1,20,file1)则执行后str1 = " I Have\n"
而如果
fgets(str1,23,file1);
则执行str1="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0'),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。
参考资料:
关于“c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!
本文来自作者[蓝子悉]投稿,不代表溟宇号立场,如若转载,请注明出处:https://gumingyu.com/changshi/202507-6138.html
评论列表(3条)
我是溟宇号的签约作者“蓝子悉”
本文概览:网上有关“c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用”话题很是火热,小编也是针对c语言中fgets 、fputs、fread、fscan...
文章不错《c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用》内容很有帮助