printf 缓冲机制的问题
来源:互联网 发布:php找出数组最大值 编辑:程序博客网 时间:2024/05/02 15:11
printf()打印的时候,猜测应该会先把输出的参数写到stdout文件里面,然后按照%d或者%lld等格式去文件里面取出来,
然后这样的就造成一个问题,就是前面的输出的参数按照不同的格式输出,输出的结果就会影响到后面的参数的输出;
例如:
int32_t a = 1234; int64_t b = 8976;
printf( "b = %lld, a = %d \n", b, a );
输出的结果是预期的结果: b = 8976, a = 1234;
int32_t a = 1234; int64_t b = 8976;
printf( "b = %d, a = %d \n", b, a );
这样呢,输出的结果则会和预期的有天差之别: b = 8976, a = 0;
原因:int64_t 占用8个字节,int32_t占用四个字节, 当调用printf的时候,会吧b按照8个字节写到stdout, 把a按照4个字节写到stdout,
然后再通过前面的格式参数去文件里面取值:%d取四个字节,所以,在以上的情况的时候,会把8976取出来, 然后剩余的四个字节是0, 然后就是输出的结果;
int32_t a = 1234; int64_t b = 0x5678905678909090;
printf( "b = %x, a = %x \n", b, a );
%x输出也是按照四个字节取出的。。,
或者你可以直接
int32_t a = 1234; int64_t b = 0x5678905678909090;
printf( "b = %d, a = %d \n", b, a );
这样把输出的int数据再转换成十六进制的,效果是一样的,注意大小端的问题;
这些问题通过强制转换就可以避免这个问题;;;;;;;
对 java 不了解,java底层应该有自动输出检测格式的,然后应该不存在这个问题!
- printf 缓冲机制的问题
- Printf的缓冲机制
- cout于printf的缓冲机制
- [转]cout和printf的缓冲机制
- cout和printf的缓冲机制
- t和printf的缓冲机制
- linux下C语言printf没有输出的问题(shell的行缓冲机制)
- printf()函数的行缓冲问题
- linux下printf实现不换行打印(printf显示不加换行的缓冲问题)
- Hibernate的缓冲机制
- linux c printf 的缓冲输出
- 什么是行缓冲?printf输出的条件
- 标准IO库的缓冲机制引起的问题
- linux编程中printf显示不加换行的缓冲问题
- 操作系统 带有缓冲机制的生产者消费者问题
- linux下的缓冲机制
- SurfaceView的双缓冲机制
- printf() 与缓冲
- 对比iOS中的四种数据存储
- XTOJ 1173 Five Tiger
- SDN/OpenFlow控制器RYU的简介、安装与使用
- php学习之try catch
- 用户名验证(javascript脚本)
- printf 缓冲机制的问题
- hadoop2.2.0编译
- ios获取时间和星期(注意week1是星期天)
- MFC中全局变量得到定义及stdafx.h的作用
- Qt数据库总结
- 黄海波新戏长发造型玩很大 网友调侃:杨桃你造吗
- ipad, iphone, android私人证书安装
- HDU 1240 Asteroids! (搜索)
- 飞机哪去了