首页 > 编程笔记 > C语言笔记 阅读:22

C语言fgets()和fputs()函数的用法(非常详细,附带实例)

在 C 语言程序中,以字符形式读写文件一次只能读写一个字符,读写的速度较慢。相对而言,用字符串的方式读写文件的速度会比用字符形式快,而且代码也更简单,这时就要用到 fgets() 和 fputs() 函数。

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”才能实现换行:
打开文本文件的方式不带“b”(r、w、a、r+、w+、a+),打开二进制文件的方式是带“b”的(rb、wb、ab、rb+、wb+、ab+),“b”的作用就是在读写文件时进行换行符的转换。

二进制文件要用二进制的方式打开和读写,文本文件则要用文本的方式打开和读写,规范使用,避免出现错误。

相关文章