zoukankan      html  css  js  c++  java
  • 标准 IO fgets与fputs 对文件的操作

    char *fgets(char *s, int size, FILE *stream);

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

     

    使用fgets从流中读取数据时会在存放的缓冲区中自动添加 '' 结尾

    例如:

    #include <stdio.h>
    
    int main(int argc, const char *argv[])
    {
        FILE *fp = NULL;
        fp = fopen(argv[1],"r");
        if(fp == NULL )
        {
            perror("open fail : ");
            return -1;
        }
        char buf[10] = {0};
        fgets(buf,5,fp); //每次在打开文本流中读取5个字节,但是只会获取到4个,会在buf的第5个位置添加 '' ;
    
        printf("buf = %s
    ",buf);
        fclose(fp);
        return 0;
    }

    测试

    使用 fgets 当读取的这一行不满足5个字符时,如现在这行只有 ab 函数会把这一行的 '
    ' 也读取到在 buf的存储 {'a', 'b', '
    ', ''};是字符串的形式


    根据fgets 就可以实现获取文件有多少行内容了

    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char *argv[])
    {
        FILE *fp = NULL;
        fp = fopen(argv[1],"r");
        char buf[20] = {0};
        int line = 0;
        while(1)
        {
            if(fgets(buf,10,fp) == NULL ) //fgets返回读取的内容,失败返回NULL,就是美都区到内容
            {
                break;
            }
            else if(buf[strlen(buf)-1] == '
    ')// strlen求buf中字符串长度,不包含''( 其实fgets读取的内容末尾是有''的 ),
           {    // -1 就是读取到末尾的内容,如果这个字符是 '
    '就是一行
          line++; 
       }
      }
      printf(
    "line = %d ",line);
      fclose(fp);
      return 0;
    }

    例子: 使用fputs 和fgets 实现文件内容复制

    #include <stdio.h>
    int main(int argc, const char *argv[])
    {
        FILE *f_r;//
        FILE *f_w;//
        if((f_r=fopen(argv[1],"r")) == NULL) //程序运行时,终端输入文件名,只读方式打开
        {
            perror("open r :");
            return -1;
        }
        if((f_w=fopen(argv[2],"w")) == NULL) //只写方式打开,打开文件清空文件内容
        {
            perror("open w :");
            return -1;
        }
        char buf[30] = {0};
        while(1)
        {
            if(fgets(buf,10,f_r)==NULL)//每次读取10个文件内容
            {
                break;
            }
            fputs(buf,f_w); //把读取到的内容写到另一个文件中
        }
        puts("cp over");
        fclose(f_r);
        fclose(f_w);
        return 0;
    }

  • 相关阅读:
    DBAccess
    业务耗时及数组
    QB资料学习.01
    格式化参数
    日志记录.02_线程处理
    nginx 开启gzip
    js 变量提升和函数提升
    js 深拷贝 vs 浅拷贝
    js 伪数组 转 数组
    js 对象原型和原型链
  • 原文地址:https://www.cnblogs.com/electronic/p/10913869.html
Copyright © 2011-2022 走看看