1.使用fgets完成统计文件行号:
fgets.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//argc:执行文件时传入文件的个数
//argv:文件数组
int main(int argc, const char *argv[])
{
//判断文件个数是否为2
if(argc!=2)
{
printf("输入的文件错误\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
FILE *fp=fopen(argv[1],"r"); //定义文件指针
if(fp==NULL) //以只读形式打开文件1
{
perror("fopen error");
return -1;
}
char buf[100]; //定义一个容器存放读取的字符,最多100个
int count=0; //定义行计数变量
while((fgets(buf,sizeof(buf),fp)) != NULL) //读取内容到buf
{
if(buf[strlen(buf)-1]=='\n')
{
count++; //读取倒数第二个字符是换行时+1
}
}
fclose(fp); //关闭文件
printf("该文件共计:%d行\n",count);
return 0;
}
运行结果如下:
ubuntu@ubuntu:day1$ ./a.out 01fopen.c
该文件共计:27行
2. 使用fgets,fputs实现2个文件拷贝:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//argc:执行文件时传入文件的个数
//argv:文件数组
int main(int argc, const char *argv[])
{
//判断文件个数是否为3
if(argc!=3)
{
printf("输入的文件错误\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
FILE *fp1=fopen(argv[1],"r"); //定义文件指针以只读形式打开
FILE *fp2=fopen(argv[2],"w"); //定义文件指针以只写形式打开
if(fp1==NULL || fp2==NULL)
{
perror("fopen error");
return -1;
}
char buf[100]; //定义一个容器存放读取的字
while((fgets(buf,sizeof(buf),fp1)) != NULL) //从fp1文件中读取内容到buf,NULL为读取到文件末尾或读取失败
{
fputs(buf,fp2); //将buf输出到fp2中
}
fclose(fp1);
fclose(fp2);
printf("拷贝成功\n");
return 0;
}