fgets的用法实例!!!

本文详细介绍了fgets函数的使用方法及注意事项,通过三个具体实例展示了如何正确设置缓冲区大小、如何处理不同长度的输入行以及如何连续读取多行内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
char *fgets(char *restrict buf, int n, FILE *restrict fp);
返回值: 成功返回buf,若已到达文件结尾或出错则返回NULL;


实例:

1. 必须指定缓冲区的长度,函数一直读到下一个换行符;见实例 I

2. 最多读取n -1个字符,读入的字符被送入缓冲区,该缓冲区以null字符结尾;见实例 II

3. 如若该行(包含最后一个换行符)的字符数超过n - 1,fgets下次调用会继续改行;附件III


实例 I:缓冲区buf的长度一直读到下一个换行符

1.txt内容:

备注:1. 仅最后的a有换行符,第一行(和第二行)没有换行符.

0000000   a   a   a   a   a   a   a   a   a   a   a   a   a   a   a   a
*
0000420   a   a   a   a  \n
0000425

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
源码&& 运行结果:

root@ubuntu:/opt/linux# cat 1.c 1.txt
#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *stream;
	char buf1[4096];
	char buf2[1024];
	stream = fopen("1.txt","r+");
	if(stream == NULL)
	{
		return -1;
	}

	fgets(buf1,1024,stream);
	printf("%s\n",buf1);
	return 0;
	
}
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
root@ubuntu:/opt/linux# gcc 1.c
root@ubuntu:/opt/linux# ./a.out 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<strong style="color: rgb(255, 0, 0);">
</strong>


实例II:最多读取n-1个字符。

1.txt内容:

root@ubuntu:/opt/linux# od -c 1.txt 
0000000   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
0000020   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1
0000040   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7
0000060   8   9  \n
0000063

1.txt内容:

root@ubuntu:/opt/linux# cat 1.txt 
01234567890123456789012345678901234567890123456789
root@ubuntu:/opt/linux# 
源码&& 运行结果:
<pre name="code" class="csharp">root@ubuntu:/opt/linux# cat 1.c;gcc 1.c;./a.out
#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *stream;
	char buf1[4096];
	char buf2[1024];
	stream = fopen("1.txt","r+");
	if(stream == NULL)
	{
		return -1;
	}

	fgets(buf1,<strong><span style="color:#ff0000;">11</span></strong>,stream);
	printf("%s\n",buf1);
	return 0;
	
}
<strong><span style="color:#ff0000;">0123456789</span></strong>
root@ubuntu:/opt/linux#




实例III:

1.txt内容与结构:

0000000   0   1   2   3   4   5   6   7   8   9   0   1   2   3   4   5
0000020   6   7   8   9   0   1   2   3   4   5   6   7   8   9   0   1
0000040   2   3   4   5   6   7   8   9   0   1   2   3   4   5   6   7
0000060   8   9   h   e   l   l   o       w   o   r   l   d   !  \n  \n
0000100
root@ubuntu:/opt/linux# cat 1.txt 
01234567890123456789012345678901234567890123456789hello world!

root@ubuntu:/opt/linux# 

2.源码 && 运行结果:

root@ubuntu:/opt/linux# cat 1.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
	FILE *stream;
	char buf1[4096];
	char buf2[1024];
	stream = fopen("1.txt","r+");
	if(stream == NULL)
	{
		return -1;
	}

	fgets(buf1,<strong><span style="color:#ff0000;">51</span></strong>,stream);
	fgets(buf2, <strong><span style="color:#ff0000;">1000</span></strong>,stream);
	printf("\tbuf1 is %s\n",buf1);
	printf("\tbuf2 is %s\n",buf2);
	return 0;
	
}
root@ubuntu:/opt/linux# ./a.out 
	buf1 is 01234567890123456789012345678901234567890123456789
	buf2 is hello world!

root@ubuntu:/opt/linux# 





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值