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. 思维导图

相关推荐
自由的好好干活22 分钟前
UBI镜像文件打包与编辑
linux·嵌入式硬件
shawnyz1 小时前
RHCSE--ansible1-入门和模块
linux·运维·ansible
奔跑的花短裤1 小时前
ubuntu安装Isaac sim4.5与强化学习使用
linux·ubuntu·机器人·强化学习·isaac sim·isaac lab
sycmancia1 小时前
C语言学习03——数据类型
c语言
陕西小伙伴网络科技有限公司2 小时前
CentOS-7 编译glibc-2.29
linux·运维·centos
宴之敖者、2 小时前
Linux——指令
linux·运维·服务器
Xの哲學3 小时前
Linux设备驱动模型深度解剖: 从设计哲学到实战演练
linux·服务器·网络·算法·边缘计算
松涛和鸣4 小时前
DAY55 Getting Started with ARM and IMX6ULL
linux·服务器·网络·arm开发·数据库·html
HIT_Weston4 小时前
101、【Ubuntu】【Hugo】搭建私人博客:元信息&翻译(二)
linux·运维·ubuntu
黎雁·泠崖4 小时前
整数的N进制字符串表示【递归+循环双版满分实现】
c语言·开发语言