您当前的位置:首页 > 淘宝百科

fgets、fputs和fread、fwrite有什么区别?C语言的问题,fread和fgets的区别是什么

时间:2023-01-30 00:51:35

本文目录

  • fgets、fputs和fread、fwrite有什么区别
  • C语言的问题,fread和fgets的区别是什么
  • C语言里为什么fgets很少用
  • C语言中fgets和fgetc的区别
  • 简答题:fgetc,fgets,fscanf,fread有什么样的区别
  • c语言中fgets的返回值类型
  • C语言 fgets()函数
  • c语言中的fgets函数
  • 求教c语言中fgets的用法

fgets、fputs和fread、fwrite有什么区别

读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志’\0’。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入 字符数组str中。fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针) 其中字符串可以是字符串常量,也可以是字符数组名, 或指针变量.整块数据的读写函数。 可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。

C语言的问题,fread和fgets的区别是什么

fread和 fgets的区别:fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.fgets :整行读取,遇到回车换行或结尾停止.在文本方式时使用.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:fgets(字符数组名,n,文件指针);其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志’\0’。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。(按行读取)fgets()每次读入一行就会指向下一行.所以把前面10行读进去了就清除. 然后下一次fgets()就是第十一行了.fgets()怎么每次都是读一行?你怎么设定?fread是用于整块数据的读写函数,可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp),其中:buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。例如: fread(fa,4,5,fp);其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。fread -- 读取文件(可安全用于二进制文件)在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fopen()函数的 mode 参数要加上 ’b’。$handle = fopen($filename, “rb“);

C语言里为什么fgets很少用

因为fgets函数只能输入字符串,而Scanf()能输入多种类型的数据,加上一般的C语言教材往往重视讲授原理,而对程序健壮性、异常处理等考虑不多,所以一般资料很少提及fgets函数。 scanf在获取用户输入的字符串时,遇到空格、制表符即终止,并在结尾自动加上”\0″。gets在获取用户输入字符串时,遇到空格、制表符不会终止,在结尾也会自动加上“\0”。 由于scanf和gets这两个函数不对输入的长度进行核查,即使用户输入超过了规定的buffer容量,函数也会接受输入,造成缓冲区溢出,程序崩溃。所以建议实际使用时最好用fgets函数来替代。附上fgets函数的有关说明:fgets函数原型:char *fgets(char *buf, int bufsize, FILE *stream);参数:1. *buf: 字符型指针,指向用来存储所得数据的地址。2. bufsize: 整型数据,指明存储数据的大小。即每次最多读取bufsize-1个字符(第bufsize个字符赋’\0’),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。3. *stream: 文件结构体指针,将要读取的文件流。如为stdin,则从键盘读取。返回值: 成功,则返回第一个参数buf; 在读字符时遇到End-of-File,则EOF被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;如果发生读入错误,ERROR被设置,返回NULL,buf的值可能被改变。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

C语言中fgets和fgetc的区别

1、fgets和fgetc都是文件函数中的输入函数。其中第fgets是输入一个字符串,而fgetc则是输入一个字符。2、例如:#include 《string.h》#include 《stdio.h》int main(void){ FILE *stream; char string,c; stream = fopen(“fan.txt“, “r+“); /* 打开一个文本*/ fgets(string,99, stream); /* 读取文本中第一行 */ printf(“%s“, string); /* 在控制台显示该行文字 */ c = fgetc(stream);//读取文本第二行第一个字符 putchar(c); //在控制台显示该字符 fclose(stream); //关闭文件 return 0;}

简答题:fgetc,fgets,fscanf,fread有什么样的区别

首先这四个函数都是从文件或者输入设备读取数据,它们之间的主要区别如下:

一、fgetc

这个函数主要用于从文件或者输入设备逐个读取字符并通过返回值返回。一般如果是从文件读取,这个文件得提前以文本模式打开。

二、fgets

这个函数主要用于从文件或者输入设备读取一行字符,如果从文件读取也要求以文本模式打开文件。这个函数相对gets要安全,因为它可以通过第二个参数指定最大能读取的字符数,防止溢出。同时这个函数会读入换行符,它一般可以和fputs函数配合使用,fputs函数输出不会自动换行。fgets也可以从键盘输入字符,通过第三个参数指定读取位置,stdin表示从键盘,文件指针表示从文件。

三、fscanf

这个函数从文件中以格式化形式读取,也是要以文本形式打开文件,具体的用法和scanf一样。文件得是文本形式,二进制形式一般是会读取出错。

四、fread

fread函数主要用于以二进制模式从文件中读取数据,它一般和fwrite函数配合使用。主要用于结构体类型变量的读取。它要求文件先以二进制模式打开,如果不指定二进制模式在Windows系统可能出错,因为Windows的换行是两个字符,是换行和回车两个字符转化而来。所以使用这个函数最好以二进制打开。

c语言中fgets的返回值类型

1、如果成功,该函数返回相同的 str 参数。如果到达文件末尾或者没有读取到任何字符,str 的内容保持不变,并返回一个空指针。如果发生错误,返回一个空指针。

在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则stream保持原来的内容,返回NULL;

2、如果发生读入错误,error指示器被设置,返回NULL,stream的值可能被改变。

如果文件中的该行,不足n-1个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过n-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

函数成功将返回stream,失败或读到文件结尾返回NULL。因此不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

扩展资料

函数使用:

1、同时可以用作键盘输入:fgets(key,n,stdin)且还必须:key[strlen(key)]=’\0’或者key[n-1]=’\0’

2、还有种程序经常使用的方法:key[strlen(key-1)]=0x00;

3、与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题。

参考资料来源:百度百科-fgets

C语言 fgets()函数

fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:char*fgets(char*string,intsize,FILE*stream);参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的字符的个数。如果该行字符数大于size-1,则读到size-1个字符时结束,并在最后补充’\0’;如果该行字符数小于等于size-1,则读取所有字符,并在最后补充’\0’。即,每次最多读取size-1个字符。stream为文件流指针。【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数FILE*stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。

c语言中的fgets函数

fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为: char * fgets(char * string, int size, FILE * stream);参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的字符的个数。如果该行字符数大于size-1,则读到 size-1 个字符时结束,并在最后补充’ \0’;如果该行字符数小于等于 size-1,则读取所有字符,并在最后补充 ’\0’。即,每次最多读取 size-1 个字符。stream为文件流指针。【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数 FILE *stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。

求教c语言中fgets的用法

从流中读一行或指定个字符,原型是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

函数

最新文章