c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用

网上有关“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()继续读取的时候是从下一行开始读。

参考资料:

百度百科-fgets

关于“c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[蓝子悉]投稿,不代表溟宇号立场,如若转载,请注明出处:https://gumingyu.com/changshi/202507-6138.html

(2)
蓝子悉的头像蓝子悉签约作者

文章推荐

发表回复

作者才能评论

评论列表(3条)

  • 蓝子悉的头像
    蓝子悉 2025年07月26日

    我是溟宇号的签约作者“蓝子悉”

  • 蓝子悉
    蓝子悉 2025年07月26日

    本文概览:网上有关“c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用”话题很是火热,小编也是针对c语言中fgets 、fputs、fread、fscan...

  • 蓝子悉
    用户072606 2025年07月26日

    文章不错《c语言中fgets 、fputs、fread、fscanf、fseek的区别和作用》内容很有帮助