|  | 
 
| 
最近在学习小甲鱼老师以前的C语言学习视频,有一个关于图片合成器的问题,我想了一下午也没什么头绪,希望能得到名位前辈的帮助
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 所谓图片合成器,就是将一个图片文件和一个zip文件,合成在一起,形成一个新的文件,当将新文件的扩展名改为:.jpg时,打开该文件将打开那那个图片,而将新文件的扩展名改为:.zip时,打开该文件又将打开那个zip压缩文件。
 
 这就涉及到文件的复制。
 
 问题就出现在这里!!
 
 写一个普通的文件复制程序,如下:
 
 
 复制代码#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)                                     
void main()
{
        char *file_name1 = (char*)calloc(30, sizeof(char));//目标文件的文件名
        char *file_name2 = (char*)calloc(30, sizeof(char));//新建文件的文件名
        char ch;                                                          //复制文件的中间变量
        FILE *fp1 = NULL, *fp2 = NULL;                        //fp1为目标文件,fp2为新建文件 
        scanf_s("%s", file_name1, 30);                          //输入目标文件的文件名
        fflush(stdin);                                                   //清空键盘缓冲区
        scanf_s("%s", file_name2, 30);                         //新建文件的文件名
        fflush(stdin);                                                   //清空键盘缓冲区
        if ((fp1 = fopen(file_name1, "r")) == NULL)        //以“读”方式打开目标文件,并判断打开是否出错
        {
                printf("error!");
                exit(0);
        }
        if ((fp2 = fopen(file_name2, "w")) == NULL)      //以“写”方式打开新建文件
        {
                printf("error!");
                exit(0);
        }
        while (!feof(fp1))                                            //开始复制,以feof判断是否复制结束。
        {
                ch = fgetc(fp1);
                fputc(ch, fp2);
        }
        if (feof(fp1))                                                  //判断是否复制成功
        {
                printf("复制成功!结束程序!");               
        }
        else
        {
                printf("error!!");
        }
}
 我可以用如上程序复制一个文本文档。
 
 但当我如上程序尝试复制一个.jpg文件即图片时,它总是复制不全。
 
 我尝试用文本文档打开新旧两个图片文件时发现,新的文件仅仅复制了旧图片文件的前几个字符,对比如下 :
 
 
   
 请问这是.jpg文件的什么特殊性质,还是我有什么没有考虑到?
 
 望各位前辈解答!
 
 感谢各位!
 
复制代码//if ((fp1 = fopen(file_name1, "r")) == NULL)
if ((fp1 = fopen(file_name1, "rb")) == NULL)
复制代码//if ((fp2 = fopen(file_name2, "w")) == NULL)
if ((fp2 = fopen(file_name2, "wb")) == NULL)
 | 
 |