• 技术文章 >后端开发 >C#.Net教程

    c语言文件的读取和写入怎么操作

    青灯夜游青灯夜游2021-07-12 16:03:56原创220

    c语言读取和写入文件的方法:1、可以使用fgetc()函数以字符形式读取文件,使用fputc()函数以字符形式写入文件;2、使用fgetc()函数以字符串的形式读取文件,使用fputc()函数以字符串的形式写入文件。

    本教程操作环境:windows7系统、c99版本、Dell G3电脑。

    1、以字符形式读写文件

    以字符形式读写文件时,每次可以从文件中读取一个字符,或者向文件中写入一个字符。主要使用两个函数,分别是 fgetc() 和 fputc()。

    字符读取函数 fgetc

    fgetc 是 file get char 的缩写,意思是从指定的文件中读取一个字符。fgetc() 的用法为:

    int fgetc (FILE *fp);

    fp 为文件指针。fgetc() 读取成功时返回读取到的字符,读取到文件末尾或读取失败时返回EOF。

    EOF 是 end of file 的缩写,表示文件末尾,是在 stdio.h 中定义的宏,它的值是一个负数,往往是 -1。fgetc() 的返回值类型之所以为 int,就是为了容纳这个负数(char不能是负数)。

    EOF 不绝对是 -1,也可以是其他负数,这要看编译器的实现。

    fgetc() 的用法举例:

    char ch;
    FILE *fp = fopen("D:\\demo.txt", "r+");
    ch = fgetc(fp);

    表示从D:\\demo.txt文件中读取一个字符,并保存到变量 ch 中。

    在文件内部有一个位置指针,用来指向当前读写到的位置,也就是读写到第几个字节。在文件打开时,该指针总是指向文件的第一个字节。使用 fgetc() 函数后,该指针会向后移动一个字节,所以可以连续多次使用 fgetc() 读取多个字符。

    注意:这个文件内部的位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址。文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对用户是隐藏的。

    字符写入函数 fputc

    fputc 是 file output char 的所以,意思是向指定的文件中写入一个字符。fputc() 的用法为:

    int fputc ( int ch, FILE *fp );

    ch 为要写入的字符,fp 为文件指针。fputc() 写入成功时返回写入的字符,失败时返回 EOF,返回值类型为 int 也是为了容纳这个负数。例如:

    fputc('a', fp);

    或者:

    char ch = 'a';
    fputc(ch, fp);

    表示把字符 'a' 写入fp所指向的文件中。

    两点说明:

    1) 被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,并将写入的字符放在文件开头。如需保留原有文件内容,并把写入的字符放在文件末尾,就必须以追加方式打开文件。不管以何种方式打开,被写入的文件若不存在时则创建该文件。

    2) 每写入一个字符,文件内部位置指针向后移动一个字节。

    【示例】从键盘输入一行字符,写入文件。

    #include<stdio.h>
    int main(){
        FILE *fp;
        char ch;
        //判断文件是否成功打开
        if( (fp=fopen("D:\\demo.txt","wt+")) == NULL ){
            puts("Fail to open file!");
            exit(0);
        }
        printf("Input a string:\n");
        //每次从键盘读取一个字符并写入文件
        while ( (ch=getchar()) != '\n' ){
            fputc(ch,fp);
        }
        fclose(fp);
        return 0;
    }

    运行程序,输入一行字符并按回车键结束,打开D盘下的 demo.txt 文件,就可以看到刚才输入的内容。

    程序每次从键盘读取一个字符并写入文件,直到按下回车键,while 条件不成立,结束读取。

    2、以字符串的形式读写文件

    fgetc() 和 fputc() 函数每次只能读写一个字符,速度较慢;实际开发中往往是每次读写一个字符串或者一个数据块,这样能明显提高效率。

    读字符串函数 fgets

    fgets() 函数用来从指定的文件中读取一个字符串,并保存到字符数组中,它的用法为:

    char *fgets ( char *str, int n, FILE *fp );

    str 为字符数组,n 为要读取的字符数目,fp 为文件指针。

    返回值:读取成功时返回字符数组首地址,也即 str;读取失败时返回 NULL;如果开始读取时文件内部指针已经指向了文件末尾,那么将读取不到任何字符,也返回 NULL。

    注意,读取到的字符串会在末尾自动添加 '\0',n 个字符也包括 '\0'。也就是说,实际只读取到了 n-1 个字符,如果希望读取 100 个字符,n 的值应该为 101。例如:

    #define N 101
    char str[N];
    FILE *fp = fopen("D:\\demo.txt", "r");
    fgets(str, N, fp);

    表示从 D:\\demo.txt 中读取 100 个字符,并保存到字符数组 str 中。

    需要重点说明的是,在读取到 n-1 个字符之前如果出现了换行,或者读到了文件末尾,则读取结束。这就意味着,不管 n 的值多大,fgets() 最多只能读取一行数据,不能跨行。在C语言中,没有按行读取文件的函数,我们可以借助 fgets(),将 n 的值设置地足够大,每次就可以读取到一行数据。

    写字符串函数 fputs

    fputs() 函数用来向指定的文件写入一个字符串,它的用法为:

    int fputs( char *str, FILE *fp );

    str 为要写入的字符串,fp 为文件指针。写入成功返回非负数,失败返回 EOF。例如:

    char *str = "http://c.biancheng.net";
    FILE *fp = fopen("D:\\demo.txt", "at+");
    fputs(str, fp);

    表示把把字符串 str 写入到 D:\\demo.txt 文件中。

    相关推荐:《C语言视频教程

    以上就是c语言文件的读取和写入怎么操作的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:c语言 读写文件
    上一篇:C语言中二维数组在内存中的存放顺序是什么 下一篇:数组指针和指针数组的区别是什么
    VIP会员

    相关文章推荐

    • c语言怎么进行字符串比较• c语言函数的三种调用方式是什么• c语言怎么求字符串的长度并输出• c语言中保留两位小数怎么表示• C语言中文件包含的命令关键字是什么

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网