C语言文件操作实战:fgets()与fputs()读写字符串详解
在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语言文件读写的基础。正确使用它们可以有效避免内存溢出问题,并根据业务需求灵活选择是否保留文件历史记录。以上就是
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













