使用fgets完成求一个文件的行号
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{ //定义文件指针并打开文件
FILE*fp;
//以写的形式打开文件
if(argc!=2)
{
printf("input file error\n");
printf("usage:./a.out fileName\n");
return -1;
}
//定义文件指针并打开文件指针
if((fp=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
//从文件读取数据
char buf[100];
int num=0;
while(fgets(buf,sizeof(buf),fp)!=NULL)
{
if(buf[strlen(buf)-1]=='\n')
{
num++;
}
}
printf("%d\n",num);
//关闭文件
fclose(fp);
return 0;
}
输出
linux@linux:~/IO$ ./a.out 10fgets.c
40
使用fgets、fputs完成两个文件的拷贝
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{ //定义文件指针并打开文件
FILE*srcfp;
FILE*pp;
if(argc!=3)
{
printf("input file error\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
//以读的形式打开文件
if((srcfp=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
if((pp=fopen(argv[2],"wcat"))==NULL)
{
perror("fopen error");
return -1;
}
//从文件读取数据
char buf[100];
while(fgets(buf,sizeof(buf),srcfp)!=NULL)
{
fputs(buf,pp);
}
//关闭文件
fclose(srcfp);
fclose(pp);
printf("拷贝成功\n");
return 0;
}
输出
linux@linux:~/IO$ gcc 11fgets.c
linux@linux:~/IO$ ./a.out 11fgets.c 11.txt
拷贝成功
linux@linux:~/IO$ cat 11.txt
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{ //定义文件指针并打开文件
FILE*srcfp;
FILE*pp;
if(argc!=3)
{
printf("input file error\n");
printf("usage:./a.out srcfile dstfile\n");
return -1;
}
//以读的形式打开文件
if((srcfp=fopen(argv[1],"r"))==NULL)
{
perror("fopen error");
return -1;
}
if((pp=fopen(argv[2],"wcat"))==NULL)
{
perror("fopen error");
return -1;
}
//从文件读取数据
char buf[100];
while(fgets(buf,sizeof(buf),srcfp)!=NULL)
{
fputs(buf,pp);
}
//关闭文件
fclose(srcfp);
fclose(pp);
printf("拷贝成功\n");
return 0;
}
linux@linux:~/IO$
思维导图