3.1 文件复制

【例3.1】编写文本文件复制程序,命令行格式为:mycopy filename1 filename2。
题目分析
每个C语言程序必须定义一个main函数作为程序的入口。程序启动从main函数开始执行,main函数返回时程序终止,若main函数末尾没有返回语句,则默认执行return 0语句。
标准C语言的main函数有两种形式:接受0个参数的int main(void),即int main();接受2个参数的int main(int argc, char *argv[])。对于后者,形参argc表示传递给程序的参数个数;形参argv是指针数组,其每个指针分别指向传递给程序的字符串参数,第一个字符串argv[0]是程序的名称。
文件的打开和关闭可调用fopen和fclose函数。文件的读取和写入可通过三种方式实现:1)fgetc和fputc函数配合,每次读写一个字符,见参考程序mycopyV1.c;2)fscanf和fprintf函数配合,每次读写一个字符,见参考程序mycopyV2.c;3)fread和fwrite函数配合,每次读写BUFSIZE个字符,见参考程序mycopyV3.c。方式3)通过增设缓冲区buffer[BUFSIZE],减少I/O操作的次数,提高程序运行速度,可用于读写量较大的程序。
检测到异常时,用exit标准库函数退出。void exit(int status) 函数可正常终止一个程序并执行清理操作,形参status值为0表示程序成功退出,非零值可表示各类异常终止。从main函数通过return语句返回一个整数值相当于用这个整数值调用exit函数。exit函数在头文件stdlib.h中声明。
参考程序

/** 文件名: mycopyV1.c * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2* 作者: 刘博*/#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char ch;/* 检查命令行参数个数 */    if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);}     /* 打开文件 */     if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1);        }/* 复制文件 */             while ((ch = fgetc(fpSrc)) != EOF) {fputc(ch, fpDes);}/* 关闭文件 */ fclose(fpSrc);fclose(fpDes);
}/** 文件名: mycopyV2.c * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2* 作者: 刘博*/#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char ch;/* 检查命令行参数个数 */    if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);}     /* 打开文件 */     if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1);        }/* 复制文件 */while (fscanf(fpSrc, "%c", &ch) != EOF) {fprintf(fpDes, "%c", ch);}              /* 关闭文件 */ fclose(fpSrc);fclose(fpDes);
}/** 文件名: mycopyV3.c * 描述: 编写文件复制命令行程序,命令行格式为:mycopy filename1 filename2* 作者: 刘博*/#include <stdio.h>
#include <stdlib.h>#define BUFSIZE 1024int main(int argc, char *argv[])
{FILE *fpSrc, *fpDes;char buffer[BUFSIZE];int in, out; /* 检查命令行参数个数 */    if (argc != 3) {printf("Usage: mycopy SourceFile DestinationFile\n");exit(1);}     /* 打开文件 */     if ((fpSrc = fopen(argv[1], "r")) == NULL) {printf("open file error!\n");exit(1);}if ((fpDes = fopen(argv[2], "w")) == NULL) {printf("creat file error!\n");exit(1);        }/* 复制文件 */while ((in = fread(buffer, 1, BUFSIZE, fpSrc)) > 0) { out = fwrite(buffer, 1, in, fpDes);/* 判断读出和写入元素个数是否一致 */if (in != out) {printf("copy error!\n");exit(1);}}/* 关闭文件 */ fclose(fpSrc);fclose(fpDes);
}

《C语言课程设计》一3.1 文件复制相关推荐

  1. C语言课程设计 - 火车票预订系统

    C语言课程设计 - 火车票预订系统 文件介绍 代码 main.c(全) mymac.h(全) database.c(不全) mainWindow.c (全) user.c (不全) manager.c ...

  2. c语言课程设计商品销售系统,c语言课程设计商品销售管理系统.pdf

    C语言课程设计商 品销售管理系统 1 2020 年 4 月 19 日 文档仅供参考 商品销售管理系统 目录 一. 需求分析 2 二.概要设计 2 三.详细设计 4 四.调试分析 14 五.用户手册 1 ...

  3. 简单的c语言课程设计管理类,C语言课程设计-学生成绩简单管理程序.doc

    C语言课程设计报告 --学生成绩简单管理程序 一.程序的主要功能 用单向链表结构实现简单的学生成绩管理功能,要求具有链表建立.链表输出.结点有序插入.节电删除.数据查询等功能. 各项菜单功能: (1) ...

  4. 小学生数学测试软件c语言流程图,小学生数学测试软件-C语言课程设计

    小学生数学测试软件-C语言课程设计 C语言课程设计 设计期限 2013 年 6 月 17 开始 至 2013 年 6 月 20 结束 系 别 信息管理与信息系统 专 业 班级 学生姓名 学号 指导教师 ...

  5. c语言结构体老师信息管理系统,C语言课程设计职工信息管理系统结构体数组实现程序源代码.doc...

    word格式 整理版 学习参考 //C语言课程设计 职工信息管理系统-结构体数组实现 #include #include #include struct employee { char num[10] ...

  6. C语言课程设计选哪个,C语言课程设计选题及要求.docx

    C语言课程设计题目 课程设计是对学生的一种全面综合训练, 是与课堂听讲. 自学和练习相辅相 成的.必不可少的一个教学环节. 通常,课程设计中的问题比平时的习题复杂的 多,也更接近实际. 课程设计着眼于 ...

  7. c++图书管理系统_轻松学做C语言课程设计:图书管理系统-数组实现

    C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力.从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现. 题目要求 图书管理系统 ...

  8. 十字交叉链表c语言,C语言课程设计报告—十字交叉链表的应用.doc

    C语言课程设计报告-十字交叉链表的应用 PAGE \* MERGEFORMAT 13 华中科技大学计算机科学与技术学院 C语言程序设计课程设计实验报告 题目:水产品养殖信息管理系统 专业: 计算机科学 ...

  9. 对c语言课程的心得体会,C语言课程设计心得体会

    C语言课程设计心得体会 回想这三周C语言课程设计的过程,真是痛并快乐着. 从领到书的那一刻,我就很郁闷?<C语言程序设计>到底事学什么的,到底有什么用.刚开始上课时?还在迷茫这门课程是用来 ...

  10. [置顶] 我的程序员之路(4)---C语言课程设计

    我们学院是很重视实践,所以每学期末都有专业课的课程设计,说简单就是用你所学的语言编一个小应用.软件工程和c语言都有课程设计,其实软件工程有点理论.都是找个系统或网站在分析,写网站或系统的过程,但是不编 ...

最新文章

  1. win10 ndk hello_world
  2. Servlet 单例多线程
  3. 【收藏】编译安装keepalived
  4. ubuntu修改服务器端口,服务器环境之4:ubuntu14.04安装tomcat,端口修改
  5. 文档数据库RavenDB-介绍与初体验
  6. mysql 日期函数大全_MYSQL 日期函数大全
  7. 数据算法之选择排序(selectSort)的Java实现
  8. 【机器学习】Andrew Ng——01概述
  9. 文件和目录(一)--unix环境高级编程
  10. Linkage 使用方法总结
  11. Python实现交通标志牌(GTSRB数据集)解析处理
  12. gns3gns3下载_如何将Gns3安装到Fedora?
  13. 小米5splus安装鸿蒙OS,小米5Splus 魔趣OS 安卓10 MagiskV21版 完美ROOT 纯净完美 原生极简 纯净推荐...
  14. 锐捷交换机查看配置命令
  15. HBuilder 开发工具
  16. android 焦点移动,Android TV 焦点上下左右移动
  17. 饱受诟病的白板面试,为什么沿用至今?
  18. plot函数--R语言
  19. SpringBoot/Spring扩展点系列之FactoryBean让你不在懵逼 - 第435篇
  20. 视频播放器(二)——播放列表

热门文章

  1. 鸟哥的Linux私房菜(服务器)- 簡易 APT/YUM 伺服器設定
  2. 使用ListView实现汽泡短信聊天
  3. MPL,MIL和MCL
  4. 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.5. 重点回顾)
  5. 信息系统项目管理师:论项目的质量管理
  6. 使用Ant Design 和Vue,React中后台开发套餐
  7. .Net业务搭配实用技术栈
  8. spring的Autowired和@Resource的区别是什么
  9. 大数据助力智慧城市建设
  10. js中常用的日期总结