C语言fgets()和fputs()函数的用法(非常详细,附带实例)
在 C 语言程序中,以字符形式读写文件一次只能读写一个字符,读写的速度较慢。相对而言,用字符串的方式读写文件的速度会比用字符形式快,而且代码也更简单,这时就要用到 fgets() 和 fputs() 函数。
fgets() 函数用于从文本文件中读取一个字符串,其语法如下:
fgets() 函数读取的字符为 n−1 个,因为读取时会读取
fputs() 函数用于向文本文件写入一个字符串,其语法如下:
【实例 1】从键盘输入一个字符串,将小写字母全部转换成大写字母,输出到文件 E:\c.dat 中保存,然后读取文件 text 中的内容并显示出来。代码如下:
【实例 2】创建两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并,并输出到一个新文件 C.txt 中,然后从中读取并显示出来。代码如下:
C语言中的文件分为两种:ASCII 文件(文本文件)和二进制文件。
可以用任何文字处理程序阅读的简单文本文件、图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码。
文本文件的数据以字符的形式存放在磁盘中,所以文本文件的内容是可以直接读懂的;而在读二进制文件时会原封不动地读取文件的全部内容,写二进制文件也是将文件缓冲区的内容全部写入,不进行转换。
二进制文件不能直接读懂,这是文本文件和二进制文件最直观的区别。
C语言中用“\n”便可实现换行,而 Windows 操作系统需要用“\r”和“\n”才能实现换行:
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。
fgets() 函数用于从文本文件中读取一个字符串,其语法如下:
fgets(str,n,fp);str 为读取文件的字符数组,n 为要读取的字符数目,fp 为文件指针。
fgets() 函数读取的字符为 n−1 个,因为读取时会读取
'\0'
。读取成功后,fgets() 函数的返回值为 str 数组的首地址;如果读取失败、读取到文件结尾或者换行,返回值为 NULL。fputs() 函数用于向文本文件写入一个字符串,其语法如下:
fputs(str,fp);str 为要写入的字符串,fp 为文件指针。fputs() 函数执行成功后返回非负数,失败返回 EOF,fputs() 函数写入时不会写入数组的
'\0'
。【实例 1】从键盘输入一个字符串,将小写字母全部转换成大写字母,输出到文件 E:\c.dat 中保存,然后读取文件 text 中的内容并显示出来。代码如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define FILESTR "E:\c.dat" //定义文件路径 int main() { FILE*fp=NULL; char str1[10],str2[10]; int i,len; printf("输入一个字符串: \n"); gets(str1); len=strlen(str1); for(i=0;i<len;i++) { if(str1[i]<='z'&&str1[i]>='a') str1[i]-=32; //大写转换 } if((fp=fopen(FILESTR,"w"))==NULL) { printf("error: cannot open file!\n"); exit(0); } fputs(str1,fp); fclose(fp); if((fp=fopen(FILESTR,"r"))==NULL) { printf("error: cannot open file!\n"); exit(0); } fgets(str2,10,fp); printf("%s",str2); fclose(fp); return 0; }编译运行,结果如下:
输入一个字符串:
abcdefg
ABCDEFG
【实例 2】创建两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并,并输出到一个新文件 C.txt 中,然后从中读取并显示出来。代码如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { FILE *fa,*fb,*fc; int i,j; char str[10],str1[10],str2[10]={"123"},str3[10]={"456"},str5[10]; char tem; if((fa=fopen("A.txt","w"))==NULL) //创建A.txt文件 { printf("error: cannot open A file!\n"); exit(0); } fputs(str2,fa); //将str2写入A.txt文件中 fclose(fa); if((fb=fopen("B.txt","w"))==NULL) //创建B.txt文件 { printf("error: cannot open B file!\n"); exit(0); } fputs(str3,fb); //将str3写入B.txt文件中 fclose(fb); if((fa=fopen("A.txt","r"))==NULL) { printf("error: cannot open A file!\n"); exit(0); } fgets(str,99,fa); //读取A.txt文件到str中 fclose(fa); if((fb=fopen("B.txt","r"))==NULL) { printf("error: cannot open B file!\n"); exit(0); } fgets(str1,100,fb); //读取B.txt文件到str1中 fclose(fb); strcat(str,str1); //将str和str1合并到str中 if((fc=fopen("C.txt","w"))==NULL) //创建C.txt { printf("error: cannot open C file!\n"); exit(0); } fputs(str,fc); //将str写入C.txt文件中 fclose(fc); if((fc=fopen("C.txt","r"))==NULL) //合并为C.txt { printf("error: cannot open C file!\n"); exit(0); } fgets(str5,10,fc); //读取C.txt到str5中 fclose(fc); puts(str5); //输出str5 return 0; }编译运行,结果如下:
123456
C语言读写文件的注意事项
在 C 语言中,打开文件后就可以对其进行读写操作,打开文件实际上是建立一个信息缓冲区,数据实际上并没有直接写入文件,而是被存储在缓冲区(一般是内存中),执行 fcolse() 函数后才将数据送入文件中,然后关闭文件。C语言中的文件分为两种:ASCII 文件(文本文件)和二进制文件。
可以用任何文字处理程序阅读的简单文本文件、图形文件及文字处理程序等计算机程序都属于二进制文件,这些文件含有特殊的格式及计算机代码。
文本文件的数据以字符的形式存放在磁盘中,所以文本文件的内容是可以直接读懂的;而在读二进制文件时会原封不动地读取文件的全部内容,写二进制文件也是将文件缓冲区的内容全部写入,不进行转换。
二进制文件不能直接读懂,这是文本文件和二进制文件最直观的区别。
C语言中用“\n”便可实现换行,而 Windows 操作系统需要用“\r”和“\n”才能实现换行:
- 写入文本文件时,系统会将“\n”转换成“\r”和“\n”写入;
- 写入二进制文件时,系统不会将“\n”转换成“\r”和“\n”写入。
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。
二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。