IO / day01 作业。

1.使用fgets统计一个文件的行号

cpp 复制代码
//使用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拷贝两个文件

cpp 复制代码
//使用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. 思维导图

相关推荐
网域小星球4 小时前
C 语言从 0 入门(十四)|文件操作:读写文本、保存数据持久化
c语言·开发语言·文件操作·fopen·fprintf
网域小星球4 小时前
C 语言从 0 入门(七)|字符数组与字符串完整精讲|VS2022 高质量实战
c语言·开发语言·字符串·vs2022·字符数组
Jia ming4 小时前
C语言实现日期天数计算
c语言·开发语言·算法
程序猿编码4 小时前
一个授予普通进程ROOT权限的Linux内核级后门:原理与实现深度解析
linux·运维·服务器·内核·root权限
小夏子_riotous4 小时前
openstack的使用——9. 密钥管理服务Barbican
linux·运维·服务器·系统架构·centos·云计算·openstack
六点的晨曦5 小时前
VMware安装Ubuntu的记录
linux·ubuntu
浅时光_c5 小时前
12 指针
c语言·开发语言
w6100104666 小时前
CKA-2026-Service
linux·服务器·网络·service·cka
爱编码的小八嘎6 小时前
C语言完美演绎7-11
c语言
爱编码的小八嘎6 小时前
C语言完美演绎7-9
c语言