fgets函数
来源:互联网 发布:caffe 训练自己的模型 编辑:程序博客网 时间:2024/05/20 07:15
函数原型
char *fgets(char *buf, int bufsize, FILE *stream);
参数
*buf: 字符型指针,指向用来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的大小。
*stream: 文件结构体指针,将要读取的文件流
返回值
- 成功,则返回第一个参数buf;
- 在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;
- 如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。
函数原型是char *fgets(char *s, int n, FILE *fp);
当fgets的操作是逐个字符读取,遇到换行符,停止读取动作,就把当前字符串(包括换行符)赋值给s;
当fgets的操作是逐个字符读取,遇到结束符,停止读取动作,也会把当前字符串(不包括结束符)赋值给s,如果当前字符串是空值就不会赋值给s,但是s原来有值的话,s会保持原值。
如果用fgets读取文件的内容,文件结尾是一个换行符,用以下程序,最后一行会输出两次。
while( !feof(fp) )
{
fgets( s , sizeof(s) , fp );
printf("%s" , s);
}
因为当读到最后一行时,只读到换行符,因为没有读到结束符 ,所以 !feof(fp) 还是真,继续下一轮循环,
最后一次fgets时,读取不到内容,所以 s 的内容没有更新 (并不是在最后一行读了两次的原因才导致输出两次,而是因为没读到新值)。
解决方法,在 fgets( s , sizeof(s) , fp ) 之前清空s ,即加上一句memset(s , 0 , sizeof(s) ) ,最后一行就不回输出两次。
while( !feof(fp) )
{
memset(s , 0 , sizeof(s) );
fgets( s , sizeof(s) , fp );
printf("%s" , s);
}
如果文件最后一行没有换行符,那么最后读取得到的s值是一个没有换行符的字符串。
0 0
- fgets函数
- fgets函数
- fgets函数
- fgets 函数
- fgets函数
- fgets函数
- fgets函数
- fgets()函数
- fgets函数
- fgets函数
- fgets()函数
- fgets函数
- fgets函数
- fgets函数
- fgets函数
- fgets函数
- fgets()函数
- fgets()函数
- expdp impdp 数据库导入导出命令详解
- poj 2777 Count Color(线段树区间修改)
- poj1014Dividing
- POJ 1012 Joseph
- 杨辉三角
- fgets函数
- 转换流以及流规律总结
- 序言
- hdu 4893 (多校1007)Wow! Such Sequence!(线段树&二分&思维)
- Java空字符串与null区别:
- variantt转int:char转换Variant?怎么转定义一个charx[]
- 深入浅出VMware的组网模式
- OBPM的组织规划
- 深入探究Android定位(一)