百科fgets()用法

news/2024/7/4 8:24:25

fgets编辑

从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋''), 如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
外文名
fgets
功    能
标准输出设备自动刷清
函数使用
键盘输入fgets(key,n,stdin)
长    度
1 字节的字符串
 
 

1函数 (ISO C)编辑

函数原型

char *fgets(char *buf, int bufsize, FILE *stream);

参数

 
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。

返回值

  1. 成功,则返回第一个参数buf;
  2. 在读字符时遇到 end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
  3. 如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。 [1]

功能

注意:《UNIX 环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。
stream文件流指针体指向文件内容地址的偏移原则
如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上'\n'),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。而,如果使用fgets() 读取文件的时候bufsize大于该行的字符总数加2(多出来的两个,一个保存文件本身的'\n'换行,一个保存字符串本身的结束标识''),文件并不会继续读下去,仅仅只是这一行读取完,随后指向文件的指针会自动偏移至下一行。
例:
如果一个文件的当前位置的文本如下
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',并自动加上字符串结束符''),当前文件位置移至下一行,虽然23大于当前行上字符总和,可是不会继续到下一行。而下一次调用fgets()继续读取的时候是从下一行开始读。

序例


     
  1. #include<string.h>
  2. #include<stdio.h>
  3. int main ( void )
  4. {
  5. FILE*stream;
  6. charstring[]="Thisisatest";
  7. charmsg[20];
  8. /*openafileforupdate*/
  9. stream=fopen("DUMMY.FIL","w+");
  10. /*writeastringintothefile*/
  11. fwrite(string,strlen(string),1,stream);
  12. /*seektothestartofthefile*/
  13. fseek(stream,0,SEEK_SET);
  14. /*readastringfromthefile*/
  15. fgets(msg,strlen(string)+1,stream);
  16. /*displaythestring*/
  17. printf("%s",msg);
  18. fclose(stream);
  19. return0;
  20. }

fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是 文件指针;str是存放在字符串的起始地址;n是一个int类型 变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'',并以str作为函数值返回。
函数原型是:char *fgets(char *s, int n, FILE *stream);

2函数使用编辑

同时可以用作键盘输入:fgets(key,n,stdin)且还必须:key[strlen(key)-1]=''
还有种程序经常使用的方法:key[strlen(key-1)]=0x00;
与gets相比使用这个好处是:读取指定大小的数据,避免gets函数从stdin接收字符串而不检查它所复制的缓存的容积导致的缓存溢出问题

fgets

(PHP 3, PHP 4, PHP 5)
fgets -- 从文件指针中读取一行

说明

string fgets ( int handle, [ int length] )
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
出错时返回 FALSE。

例子


     
  1. <?php
  2. $handle=fopen("/tmp/inputfile.txt","r");
  3. while(!feof($handle)){
  4. $buffer=fgets($handle,4096);
  5. echo$buffer;
  6. }
  7. fclose($handle);
  8. ?>

 

来自为知笔记(Wiz)


转载于:https://www.cnblogs.com/bugtan/p/4509827.html


http://www.niftyadmin.cn/n/2676740.html

相关文章

小米的“真智能家居”,会不一样吗?

作为下一个千亿级市场&#xff0c;智能家居从不缺乏野心家。因此当看到各家公司都在反复谈论对这个行业的整体战略、未来愿景、平台构建、颠覆级产品等的时候&#xff0c;宅客君想&#xff0c;大家应该一点都不陌生。 在反复宣讲自家智能家居愿景后&#xff0c;小米在今天上午也…

javascript refresh page

Javascript刷新页面的几种方法&#xff1a; 1 history.go(0) 2 location.reload() 3 locationlocation 4 location.assign(location) 5 document.execCommand(Refresh) 6 window.navigate(location) 7 location.replace(location) 8 document.U…

iOS项目重命名以及Xcode修改Scheme名称图文详解 (yoowei)

在iOS开发中&#xff0c;有时候想改一下项目的名字&#xff0c;都会遇到很多麻烦。温馨提醒&#xff1a;记得备份。 看到项目名称&#xff0c;总感觉有点low,所以尝试着要将其更改一下。 项目原结构如下&#xff1a; 更改后的项目结构如下&#xff1a; 下面开始更改操作 1&…

深度学习如何入门

为什么80%的码农都做不了架构师&#xff1f;>>> 作者&#xff1a;Jacky Yang 链接&#xff1a;https://www.zhihu.com/question/26006703/answer/129209540 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。…

精品小图标

精品小图标 GIF小图标 Home首页 登陆注册 电话 电视机 放大镜 …

【学习中】Unity中级篇 Schedule

章节内容签到Unity3D 实战技术第二版视频教程(中级篇)1.游戏引擎发展史 2.Unity发展史 3.3D图形学与必要组件 5月19日4.核心类_GameObject类 5月19日5.核心类_MonoBehaviour类_脚本生命周期 5月19日6.Unity伪多线程研究实验 5月19日7.核心类_Time类 5月19日8.场景异步加…

cpustat:在Linux下根据运行的进程监控CPU使用率

cpustat 是 Linux 下一个强大的系统性能测量程序&#xff0c;它用 Go 编程语言 编写。它通过使用 “用于分析任意系统的性能的方法(USE)”&#xff0c;以有效的方式显示 CPU 利用率和饱和度。 它高频率对系统中运行的每个进程进行取样&#xff0c;然后以较低的频率汇总这些样本…

Linux Shell 下的输出重定向

Linux Shell 环境中支持输入输出重定向&#xff0c;用符号<和>来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出&#xff0c;可以用来指定需要重定向的标准输入或输出&#xff0c;比如 2>a.txt 表示将错误信息输出到文件a.txt中。 同时&#xff0c;还可…