//char *fgets(char *str, int n, FILE *stream)
/*功能:
 *从文件指针stream中读取n-1个字符,存到以str为起始地址的空间里,直到读完一行,如果成功则返回str的指针,否则返回NULL。*/
/*参数:
 * str -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
 * n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
 * stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。*/
/*返回值:
 * 成功返回buf,失败或者读到文件结尾返回NULL
 * */
/*结束的标志:
 * 当读取 (n-1) 个字符时,或者读取到换行符时,或者到达文件末尾时,它会停止,具体视情况而定*/
/*出错终止的判断:
 *不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判

* */

#include <stdio.h>
#include <string.h>int main()
{FILE *fp;char str[60];int len;char str_1[60] = "This is test file!";printf("文件中文本内容:str_1 = %s\n",str_1); printf("文件中文本长度:strlen(str_1) = %d\n",strlen(str_1)); /* 打开用于读取的文件 */fp = fopen("file.txt" , "r");if(fp == NULL) {perror("打开文件时发生错误");return(-1);}printf("strlen(str) = %d\n",strlen(str));printf("sizeof(str) = %d\n",sizeof(str));
//是因为fgets(str,n,fp)函数中,n为求得到的字符,但只能从fp指向的文件输入n-1个字符,然后在最后加上一个'\0'字符,因此得到的字符串有n个字符,把它们放到str的首地址。
//所以实际上len-1才是我们希望看到的数目
//注意:当n的长度小于字符串的长度时候,len 就是我们看到的数目。if( fgets (str, 60, fp)!=NULL ) {/* 向标准输出 stdout 写入内容 *///puts(str);    len = strlen(str);printf("str = %s  len = %d\n",str,len-1);}fclose(fp);return(0);
}
/*       结果* 当n=60 > 18 时候:str为 This is test file!*      str长度应为18;len的值为19;实际上len-1是我们希望看到的数目,此时len-1=18*      :原因:n大于该行的字符总数加2(多出来的两个,一个保存文件本身的'\n'换行,一个保存字符串本身的结束标识'\0')* 当n=7 < 18时候:str为 This i*      str长度为应6;len的长度为6;实际上len是我们希望看到的数目,此时len-1=5*      :原因:n小于该行字符总数,读取文件的指针会偏移至当前读取完的这个字符之后的位置。也就是第二次再用fgets()读取文件的时候,则会继续读取其后的字符* */
  例:如果一个文件的当前位置的文本如下Love, I HaveSince 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()相关推荐

  1. gets 函数 - fgets 函数 - scanf 函数 - gets_s 函数 - 字符串最后一个单词的长度

    gets 函数 - fgets 函数 - scanf 函数 - gets_s 函数 - 字符串最后一个单词的长度 1. gets 函数 在 C 语言中,while 循环的功能和它在其他语言中一样.它首 ...

  2. python的fopen函数_linux c函数(fgets,fputs,fopen)

    clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数st ...

  3. 【C 语言】文件操作 ( 按照文本行的方式读写文件 | fgets 函数 | fputs 函数 )

    文章目录 一.fgets 函数 二.fputs 函数 三.按照文本行的方式写文件 四.按照文本行的方式读文件 一.fgets 函数 fgets 函数 : 从 FILE *stream 指针指向的文件中 ...

  4. C语言学习笔记---fgets()函数和fputs()函数

    fgets()函数   fgets()函数和gets()函数一样,都是读取字符串,不过gets()函数通常用来从键盘读取输入的字符串,fgets()函数可以通过文件来读取字符串.下面通一个例子来演示f ...

  5. C语言学习笔记---字符读取函数scanf()、gets()、fgets()

      在从控制台读取字符的时候,常用的函数有scanf(). gets().fgets()这几个函数,那么这几个函数有什么区别和联系呢? 1.scanf()函数   sacnf() 函数用来从键盘读取字 ...

  6. fgets()和gets()函数的区别

    在编程中发现gets和fgets一些区别总结一下: 1.fgets比gets安全! 为了安全,gets少用,因为其没有指定输入字符的大小,限制输入缓冲区得大小,如果输入的字符大于定义的数组长度,会发生 ...

  7. gets、puts函数和fgets、fputs函数的区别与联系

    1.gets函数 在读取字符串时,scanf函数和%s转换说明符只能读取一个单词,于是早期就由gets函数承担了读取整行字符串的作用.gets函数读取整行输入,直至遇到换行符,然后丢弃换行符,接着储存 ...

  8. C++之 fgets函数

    一.读字符串函数fgets 函数原型: char fgets ( char* str, int size, FILE* stream)* *str: 字符型指针,用来存储所得数据的地址.字符数组. s ...

  9. fwrite函数,fread函数和fgets函数详解以及使用方法

    c/c++文件处理函数 1. fgets函数 函数原型 char *fgets(char *s, int size, FILE *stream); 参数解释: s 代表要保存到的内存空间的首地址,可以 ...

最新文章

  1. kafka实战最佳经验,【源码分析设计模式 10
  2. JavaSE教程-03深入探究原码,反码,补码-扩展
  3. python pillow环境_Python环境Pillow( PIL )图像处理工具使用解析
  4. 201521123078 《Java程序设计》第6周学习总结
  5. java 根据客户端重定向_Java Web笔记 - 转发与重定向的区别与在FireBug客户端的表现...
  6. php unset 多可以什么_php unset()销毁单个或多个变量
  7. 模态对话框的消息循环原理及分析笔记
  8. java流与文件——操作文件
  9. install pymssql on centos
  10. fpga驱动oled iic显示代码_【接口时序】6、IIC总线的原理与Verilog实现
  11. Animal-AI 2.0.0发布了!快来测试你的智能体吧。
  12. 小程序判断ios还是android
  13. linux的ip是什么,Linux-IP地址后边加个/8(16,24,32)是什么意思?
  14. Android中监听电源键长按、Home键、Home键长按
  15. WebStorm配置TSLint
  16. 【Distilling】《Distilling the Knowledge in a Neural Network》
  17. 人口会一直增长下去吗_现在世界人口约多少亿 世界人口会一直增加吗还是越来越少...
  18. 4.输入10个字符,统计里面大写英文的个数
  19. ZYNQ aurora_8b10b光通信使用
  20. nginx配置https双向验证(ca机构证书+自签证书)

热门文章

  1. gperf学习笔记(二)
  2. 小强学渲染之OpenGL渲染管线详析
  3. java集合类学习笔记之LinkedHashMap
  4. 分布式系统理论基础,以及选举,多数派,租约
  5. AtCoder Grand Contest 015
  6. Robotium中定位Android客户端疑难元素
  7. ORA-12012: error on auto execute of job quot;ORACLE_OCM
  8. CentOS 7 更新软件源和系统
  9. 黑马程序员--java基础--其他对象
  10. python下requests的安装、测试、入门资料、官方资料