使用C语言做图像文件复制问题

为了学习C语言中文件操作,我fopen一个图像文件1.jpeg,先fgetc,再fputc到另一个文件2.jpeg(空文件)中,(该程序已经对文本文件的复制完美实现),结... 为了学习C语言中文件操作,我fopen一个图像文件1.jpeg,先fgetc,再fputc到另一个文件2.jpeg(空文件)中,(该程序已经对文本文件的复制完美实现),结果新图像文件不能显示,不能查看。大小比源文件要小5.2k。请问是怎么回事,是不是图像有什么处理机制,请给出解决方法。解决后另加30分! 展开
 我来答
测绘地理信息
2010-08-06 · TA获得超过2204个赞
知道小有建树答主
回答量:516
采纳率:100%
帮助的人:463万
展开全部
这样写就行了,我也已经试过了:
#include<stdio.h>
void main()
{
char pBuffer[8];
FILE *f1, *f2;
f1 = fopen("1.jpg", "rb"); // 以二进制形式读
f2 = fopen("2.jpg", "wb"); // 以二进制形式写
while (!feof(f1))
{
fread(pBuffer, 1, 8, f1); // 每次读8个字节
fwrite(pBuffer, 1, 8, f2); // 每次写8个字节
}
fclose(f1);
fclose(f2);
}
袁重桥
2010-08-04 · 超过13用户采纳过TA的回答
知道答主
回答量:29
采纳率:0%
帮助的人:27.2万
展开全部
这里有一个问题你没有考虑到: 就是fgetc()和 fputc()都是读取和写入字符char的函数。这里的字符可以看作是 ASCII码.你如果读文本,是没有任何问题的,但是图像文件里面是字符吗? 不是!

所以出现了这样的问题。

图像文件格式比较复杂,这方面知识很多。就单单JPEG格式来说,它是一个专门的专家组在定义这个格式。

简单的理解,图像文件中存储的是 描述部分和数据部分。 描述部分可能是字符。但是数据部分不是字符。

你要拷贝图像,就不能fgetc()/fputc()了,可以用fread()/fwrite()了。
因为这两个函数读取的是数据流,它们不关心读取的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式