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个半参数的值。