fgets的使用
来源:互联网 发布:域名池是什么意思 编辑:程序博客网 时间:2024/05/29 04:00
从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。
目录
1函数 (ISO C)编辑
函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流。
返回值
- 成功,则返回第一个参数buf;
- 在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
- 如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。[1]
功能
注意:《UNIX 环境高级编程》中指出,每次调用fgets函数会造成标准输出设备自动刷清!案例详见《UNIX环境高级编程(第二版)》中程序清单1-5和课后习题5.7,习题5.7的答案中给出了相关的论述。
stream文件流指针体指向文件内容地址的偏移原则
如果使用fgets()读取某个文件,第一次读取的bufsize为5,而文件的第一行有10个字符(算上'\n'),那么读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符。而,如果使用fgets() 读取文件的时候bufsize大于该行的字符总数加2(多出来的两个,一个保存文件本身的'\n'换行,一个保存字符串本身的结束标识'\0'),文件并不会继续读下去,仅仅只是这一行读取完,随后指向文件的指针会自动偏移至下一行。
例:
如果一个文件的当前位置的文本如下
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()继续读取的时候是从下一行开始读。
序例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<string.h>
#include<stdio.h>
intmain(
void
)
{
FILE
*stream;
charstring[]=
"Thisisatest"
;
charmsg[20];
/*openafileforupdate*/
stream=
fopen
(
"DUMMY.FIL"
,
"w+"
);
/*writeastringintothefile*/
fwrite
(string,
strlen
(string),1,stream);
/*seektothestartofthefile*/
fseek
(stream,0,SEEK_SET);
/*readastringfromthefile*/
fgets
(msg,
strlen
(string)+1,stream);
/*displaythestring*/
printf
(
"%s"
,msg);
fclose
(stream);
return0;
}
fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自动在最后加'\0',并以str作为函数值返回。
函数原型是:char *fgets(char *s, int n, FILE *stream);
2函数使用编辑
同时可以用作键盘输入:fgets(key,n,stdin)且还必须:key[strlen(key)-1]='\0'
还有种程序经常使用的方法: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
2
3
4
5
6
7
8
<?php
$handle
=
fopen
(
"/tmp/inputfile.txt"
,
"r"
);
while
(!
feof
(
$handle
)){
$buffer
=
fgets
(
$handle
,4096);
echo
$buffer
;
}
fclose(
$handle
);
?>
0 0
- fgets函数的使用
- fgets的使用
- fgets函数的使用
- 关于FGETS()函数的使用
- fgets()和fputs()的使用
- linux c/c++ fgets函数的使用
- 使用fgetc实现fgets的功能
- 字符串读写...fgets 函数的使用
- 使用fgetc实现fgets的功能 参数与返回值的含义,同fgets
- fgets fputs 的结合使用 ;gets puts的结合使用
- fgets() - fputs()函数使用
- fgets & fputs 使用...
- fgets()函数使用
- linux fgets() 接口使用
- fgets函数使用
- fgets函数使用注意事项
- 数据接受函数的使用场合 gets fgets recv*
- fgets函数使用时应该注意的问题
- i++与++i
- Store Kit Guide(In App Purchase)翻译
- 工作中的项目总结概览
- spring 学习书籍
- Android中的SystemClock类
- fgets的使用
- Oracle时间与Unix时间戳的转换
- 关于MACOS 10.9.4安装完xcode6.0beta后,xcode4.6打开崩溃的解决办法
- synchronized同步的对象不能是Integer等类型
- AOP设计场景
- java策略模式 写的不错
- 内核安装-ERROR: modinfo
- poj 1012 & hdu 1443 Joseph(约瑟夫环变形)
- IOS 学习笔记--对frame与bounds的理解