当前位置:网站首页>笔记:fgets函数详解
笔记:fgets函数详解
2022-07-29 20:49:00 【摁回车的大雷】
对fgets函数的一些测试:
char *fgets(char *s, int size, FILE *stream);
它的功能是从 stream 流中读取 size 个字符存储到字符指针变量 s 所指向的内存空间。它的返回值是一个指针,指向字符串中第一个字符的地址。
其中:s 代表要保存到的内存空间的首地址,可以是字符数组名,也可以是指向字符数组的字符指针变量名。size 代表的是读取字符串的长度。stream 表示从何种流中读取,可以是标准输入流 stdin,也可以是文件流,即从某个文件中读取
一、 每次调用读取的字符个数
file.txt
hello world!
fight for the better future!
test1.c
#include <stdio.h>
#include <stdlib.h>//exit
#include <strings.h>//bzero
int main()
{
FILE* fp;
if(NULL == (fp = fopen("file.txt","r")))
{
printf("打开文件失败!");
exit(-1);
}
char buf[10] = "\0";
int count = 0;
while(NULL != fgets(buf,sizeof(buf),fp))
{
count++;
printf("%s",buf);
bzero(buf,sizeof(buf));
printf("|第%d次循环|",count);
}
return 0;
}
结果分析:

- 假设fgets函数的参数2为 n(n个字节),读取文件流fp时从文件首开始,在不遇到换行时,每调用一次调用读取得到 n-1 个有效字符,fgets 函数自动在读的 n-1个字符后面添加 ‘\0’ ,共保存 n 个字符到参数1中
- 下一次调用 fgets 函数时,从上次读取结束的位置继续读取,如果在读取的前 n-1 个字符时遇到换行,则本次读取到换行符为止,同时仍然在换行符后面添加 ‘\0’ ,一并保存到参数1中
二、 关于覆盖的问题
file.txt
hello world!
fight
for the better future!
test2.c
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
int main()
{
FILE* fp;
if(NULL == (fp = fopen("file.txt","r")))
{
printf("打开文件失败!");
exit(-1);
}
char buf[20] = {
'\0'};
fgets(buf,sizeof(buf),fp);
int i;
for(i=0;i<20;i++)
{
printf("|%c|-",buf[i]);
}
printf("到这里\n\n");
// bzero(buf,sizeof(buf));
fgets(buf,sizeof(buf),fp);
for(i=0;i<20;i++)
{
printf("|%c|-",buf[i]);
}
return 0;
}
结果分析:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zUon9GZ2-1659097180913)(C:\Users\Pioneer\AppData\Roaming\Typora\typora-user-images\image-20220729200141182.png)]](/img/58/42b06586b838d969f7510c5b5ffad9.png)
- 如果不再第一次输出后清空buf,第二次保存时进来时,buf中仍有上一次读取时保存的字符
- 取消bzero函数的注释后运行结果如下:
![..(img-zUon9GZ2-1659097180913)]](/img/6e/4a77859c736fc1064001c0f89fbcce.png)
边栏推荐
- 如何优雅的自定义 ThreadPoolExecutor 线程池
- 378. The Kth Smallest Element in an Ordered Matrix
- 回归——岭回归
- 解决报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
- Fully automated machine learning modeling!The effect hangs the primary alchemist!
- 240. Searching 2D Matrix II
- 无文件落地免杀的初尝试思考(上)
- 从实例学Kettle(一):获取股票行情数据
- JSP Servlet JDBC MySQL CRUD Sample Tutorial
- 336. 回文对
猜你喜欢

240. Searching 2D Matrix II

Cobaltstrike和BurpSuite桌面快捷配置

一 JS中Promise用法、二闭包的概念与用法、三对象创建的四种方式与区区别、四 如何声明一个类

Panorama Tutorial丨How to shoot sunrise and sunset scenes in VR panoramic shooting?

解析掌握现代化少儿编程实操能力

GET_ENTITYSET Method Implementation Guide for SAP ABAP OData Service Data Provider Class

.NET 6.0中使用Identity框架实现JWT身份认证与授权

阿里 P8 爆出的这份大厂面试指南,看完工资暴涨 30k!
![LeetCode 593 有效的正方形[数学] HERODING的LeetCode之路](/img/c2/34624c9c7693ba40d0b3724c0db611.png)
LeetCode 593 有效的正方形[数学] HERODING的LeetCode之路

VSCode配置终端为系统命令行
随机推荐
MySQL - 设计游戏用户信息表
VSCode配置终端为系统命令行
网站ping端口的操作方法和命令介绍
MySQL Data Query - Simple Query
ALBERT:A Lite BERT for Self-supervised Learning of Language Representations
336. 回文对
惠普服务器硬盘指示灯不亮或显示蓝色
刚重装的win7系统不能上网(深度系统安装步骤)
SwiftUI * @State 相关问题
Qualcomm WLAN framework learning (31) -- Power save
MySQL Data Query - Union Query
系列(jupyter自动保存失败)
mdnice-test
APM电机输出逻辑(Motors类详解)
银河麒麟V10 SP2 x86编译安装 PHP7.4
C# 窗体与子线程数据交互
品牌广告投放平台的中台化应用与实践
LeetCode 0593. 有效的正方形
The cornerstone of distributed: reliability - What a tangled web we weave
leetcode-593:有效的正方形