免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2345 | 回复: 8
打印 上一主题 下一主题

怎么打印buf只出来Gif89a? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-09 11:03 |只看该作者 |倒序浏览
#include <stdio.h>

#include <stdlib.h>



#define MAXLEN 1024



int main(int argc, char *argv[])

{

    if( argc < 3 )

    {

        printf("usage: %s %s\n", argv[0], "infile outfile");

        exit(1);

    }

   

    FILE * outfile, *infile;

    outfile = fopen(argv[2], "wb" );

    infile = fopen(argv[1], "rb");

    unsigned char buf[MAXLEN];

    if( outfile == NULL || infile == NULL )

    {

        printf("%s, %s",argv[1],"not exit\n");

        exit(1);

    }   

   

    int rc;

    while( (rc = fread(buf,sizeof(unsigned char), MAXLEN,infile)) != 0 )

    {
        printf("buf is %s",buf);
        fwrite( buf, sizeof( unsigned char ), rc, outfile );

}

fclose(infile);

fclose(outfile);



  return 0;

}

论坛徽章:
0
2 [报告]
发表于 2007-08-09 11:15 |只看该作者
因为infile的内容只有“Gif89a”

论坛徽章:
0
3 [报告]
发表于 2007-08-09 11:18 |只看该作者
什么啊.不明白,明明是图片,怎么只出来这个?

论坛徽章:
0
4 [报告]
发表于 2007-08-09 11:19 |只看该作者

  1. printf("buf is %s",buf);
复制代码

有个隐患,如果你读出来的MAXLEN个字节中没有0x00的,打印出来的可能会是很长的串,长度是不确定的,直到在BUF[0]的地址之后遇到0x00字节的才中止。

[ 本帖最后由 ccjjhua 于 2007-8-9 11:21 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2007-08-09 11:27 |只看该作者
可是我这是在循环,碰到0x00不打印,但没有0x00的话还是会打印的啊,那就应该会有数据的啊

论坛徽章:
0
6 [报告]
发表于 2007-08-09 14:16 |只看该作者
你本来打算输出什么?

论坛徽章:
0
7 [报告]
发表于 2007-08-09 21:23 |只看该作者
printf("buf is %s",buf);

=>


for (unsigned int k =0; k <rc; k++) {
    printf("%02d",buf[k]);
}

论坛徽章:
0
8 [报告]
发表于 2007-08-10 00:57 |只看该作者
很正常,printf() 以字符串输出, 图片里很快就会遇到0x00, 头几个字节是媒体格式, 有个gif.
程序大致是没问题的,没有判断负值, fwrite没有也没有判断写入是否完全。我不知道fwrite能否一次
将所有buf的内容写进去, 但是普遍程序里都把fwrite放在一个循环里。
标准输入输出都带缓存, 如果写入缓存满了,很可能不能一次全部写入。

论坛徽章:
0
9 [报告]
发表于 2007-08-10 03:29 |只看该作者
输出被 '\0' 截断
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP