1.使用fgets统计一个文件的行号
//使用fgets统计一个文件的行号
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc<2) //获取文件名
{
printf("input error\n!");
printf("usage: ./a.out file\n");
}
FILE *fp;
if( (fp=fopen(argv[1], "r"))==NULL ) //打开文件
{
perror("fopen");
return -1;
}
int count=0;
char buf[16] = ""; //定义fgets一次获取字符串
while(1)
{
if(fgets(buf, sizeof(buf), fp)==NULL) //判断是否到文件尾部了
{
break;
}
//printf("buf=%s", buf);
for(int i=0; buf[i]!='\0'; i++) //搜索\n
{
if(buf[i]=='\n')
{
count++;
//printf("count=%d\n", count);
break;
}
}
}
printf("total lines=%d\n", count);
fclose(fp); //关闭文件
return 0;
}
2.使用fgets\fputs拷贝两个文件
//使用fgets\fputs拷贝两个文件
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, const char *argv[])
{
if(argc!=3)//获取目标,原文件名
{
printf("input files error\nusage: ./a.out dest src\n");
return -1;
}
FILE *src;
FILE *dest;
if( (src = fopen(argv[1], "r"))==NULL ) //判断文件打开是否成功
{
perror("src fopen");
return -1;
}
if( (dest = fopen(argv[2], "w"))==NULL ) //判断文件打开是否成功
{
perror("dest fopen");
return -1;
}
char buf[4] = ""; //拷贝读取和写入的缓存
while( fgets(buf, sizeof(buf), src) != NULL) //读取+判断文件是否到尾部
{
fputs(buf, dest);//写入目标文件
}
fclose(src); //关闭文件
fclose(dest);
puts("copy successed!\n");
return 0;
}
3. 思维导图
![](https://i-blog.csdnimg.cn/blog_migrate/322a03c3b4a4c09577d7dd4ce5c9a041.png)