标准 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;
}

原文地址:https://www.cnblogs.com/electronic/p/10913869.html