见鬼了!!!打到一只鬼!!!

 

 

printf("duration:%d s, file size:%d bytes, overall bit rate:%d kb/s/n",
        ctx->duration/1000000,
        ctx->file_size,
        ctx->bit_rate/1000);
printf("duration:%d s/n", ctx->duration/1000000);
printf("file size:%d bytes/n", ctx->file_size);
printf("overall bit rate:%d kb/s/n", ctx->bit_rate/1000);

 

 

结果:

duration:18 s, file size:0 bytes, overall bit rate:303107 kb/s
duration:18 s
file size:303107 bytes
overall bit rate:128 kb/s

 

 

疯狂了!这是咋回事儿???!!!

 

问题就出在ctx本身上,它是一个这样的结构体:

struct CTX{

...

int64_t duration;

int64_t file_size;

int bit_rate;

...

}ctx;

 

对duration和file_size的格式化输出正确的情况应该用%lld(64位系统使用%ld)。若用%d输出,那么第一次输出的是duration的低32位(小端终结),第二次输出的是duration的高32位(0)。第三次输出的是第二个参数file_size的低32位,于是,一句表面上语法无误的三个参数的printf实际上只输出了1个半参数的值。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值