C语言文件操作实战:fgets()与fputs()读写字符串详解

Dylan
Dylan
发布时间:2026-10-16 | 3人浏览过
原创

在C语言的标准I/O库中,fgets()和fputs()是处理文本行读写的高效工具。前者安全地读取字符串至缓冲区并自动附加空终止符,后者将指定字符串写入文件流而不添加换行符。本文结合代码实例,演示如何通过fopen()设置访问模式(如只读、写入或追加),以实现对文本文件的精确控制。

fgets()函数:从文件流读取字符串

fgets()函数主要用于从指定的文件指针中读取一行字符串。相较于容易引发缓冲区溢出的gets(),fgets()更加安全,因为它允许开发者指定读取的最大字符数。该函数在读取过程中遇到换行符、文件末尾(EOF)或达到最大长度限制时会停止,并自动在读取内容的末尾添加字符串结束符'\0'。

其基本调用形式如下:

fgets(char *str, int n, FILE *stream)

参数说明:str为接收数据的缓冲区,n为缓冲区大小(实际最多读取n-1个字符),stream为指向文件对象的指针。

第1步:打开文件并进行基础读取

首先需要使用fopen()函数以只读模式打开目标文件。如果文件指针返回NULL,则说明打开失败。

int main()
{
	FILE *in = fopen("123.txt", "r");
	char str1[30];

	if (in == NULL) {
		puts("打开失败!");
	} else {
		// 读取最多9个有效字符(加上\0共占10字节)
		fgets(str1, 10, in);
		puts(str1);
		fclose(in);
	}
	return 0;
}

当设定读取长度为10时,函数会从文件中提取前9个可见字符。若第10位为空位或未显示,这取决于原文的具体内容表现。

第2步:调整参数读取更多内容

为了读取文件的全部或更多内容,可以适当增大第二个参数的值。例如将大小设为30,即可尝试读取更多的数据。

此外,fgets()的第三个参数不仅可以是文件指针,还可以设置为标准输入流stdin。这将使函数具备从键盘获取用户输入的能力。

fputs()函数:向文件流写入字符串

fputs()函数的作用是将一个字符串写入到指定的文件流中。与fprintf()不同,fputs()不会自动在末尾添加换行符。其原型为:

int fputs(const char *s, FILE *stream)

第3步:使用写模式覆盖文件内容

若以“w”(Write)模式打开文件,原有的文件内容将被清空。随后使用fputs()写入新字符串。

int main()
{
	FILE *out = fopen("123.txt", "w");
	char str[] = "abc 123 def 456";

	if (out != NULL) {
		fputs(str, out);
		fclose(out);
	}
	return 0;
}

运行上述代码后,打开123.txt文件可以看到新写入的内容已经替换了旧数据。这就是w模式的典型行为——覆写。

第4步:使用追加模式保留原有数据

如果不希望覆盖原文件,可以在fopen()中使用“a+”权限。这种模式下,写入操作会在文件的最后位置开始追加新的字符串。

in = fopen("123.txt", "a+");

使用该模式后再次运行写入程序,文件中原有的内容依然存在,新增的文字紧跟其后。

如果需要在新写入的内容下方另起一行,必须在传入fputs()的字符串中手动加入换行转义符“\n”。否则新增文本将与上一段内容在同一行内连在一起。

总结

fgets()和fputs()配合文件打开模式(r/w/a)构成了C语言文件读写的基础。正确使用它们可以有效避免内存溢出问题,并根据业务需求灵活选择是否保留文件历史记录。以上就是的详细内容,更多关于的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表