鱼C论坛

 找回密码
 立即注册
查看: 2798|回复: 4

文件合成器

[复制链接]
发表于 2012-7-15 13:24:23 | 显示全部楼层 |阅读模式
1鱼币
源代码:
#include <stdio.h>
#include <stdlib.h>
void main()
{
      FILE *f_file, *f_pic, *f_finish;
      char ch, pic_name[20], file_name[20], finish_name[20];
      printf("请输入要合成的图片、文件名称: \n");
      printf("图片: ");
      scanf("%s", pic_name);
      printf("文件: ");
      scanf("%s", file_name);
      printf("结果: ");
      scanf("%s", finish_name);
      
      if( !(f_pic = fopen(pic_name, "rb")))
      {
            printf("Cannot open the ficture %s!\n", pic_name);
            exit(0);   // 终止程序
      }
      if( !(f_file = fopen(file_name, "rb")))
      {
            printf("Cannot open the file %s!\n", file_name);
            exit(0);   // 终止程序
      }
      if( !(f_finish = fopen(finish_name, "wb")))
      {
            printf("Cannot open the file %s!\n", finish_name);
            exit(0);    // 终止程序
      }
      while( !feof(f_pic) )
      {
            ch = fgetc(f_pic);
            fputc(ch, f_finish);
      }
      fclose(f_pic);
      while( !feof(f_file) )
      {
            ch = fgetc(f_file);
            fputc(ch, f_finish);
      }
      fclose(f_file);
      fclose(f_finish);
}
问一下,文件复制过程中好像没有把文件结束标志EOF复制到目标文件中,那么目标文件的结束标志哪儿来的?
新文件大小比源文件大小和要大2字节,他是怎么来的?

最佳答案

查看完整内容

首先明确一下EOF的概念,EOF是在stdio.h中定义的一个常量,为#define EOF (-1) 用来表示文件的结尾,当某些函数读取到文件尾时便返回EOF。另外,不是说每个文件的尾部都有一个专门的标志用来标示文件结尾,更不是说每个文件尾都有EOF,我们可以想象一下,如果我们每次读取一个字符都要判断是否到达文件尾,那样效率也太低了,那如何判断文件是否已经结束了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-15 13:24:24 | 显示全部楼层
首先明确一下EOF的概念,EOF是在stdio.h中定义的一个常量,为#define EOF (-1)  用来表示文件的结尾,当某些函数读取到文件尾时便返回EOF。另外,不是说每个文件的尾部都有一个专门的标志用来标示文件结尾,更不是说每个文件尾都有EOF,我们可以想象一下,如果我们每次读取一个字符都要判断是否到达文件尾,那样效率也太低了,那如何判断文件是否已经结束了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 17:48:21 | 显示全部楼层
有一个函数,feof(FILE *fp)是专门判断是不是文件结束的。如果是结尾,返回一,否则返回零
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-15 17:51:24 | 显示全部楼层

还有,小甲鱼老师,我感觉您写的那个文件图片合成的程序有点不好,就是每当输入要合成的文件,最好都判断一下,如果打不开就终止程序。而这样先把文件图片的名字输进去,再判断是否可以打开就有点不好了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-15 18:12:28 | 显示全部楼层
小甲鱼 发表于 2012-7-15 14:31
首先明确一下EOF的概念,EOF是在stdio.h中定义的一个常量,为#define EOF (-1)  用来表示文件的结尾,当某些 ...

小甲鱼老师您告诉我吧,真的很想知道额
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-28 00:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表