现在的位置: 首页 > 综合 > 正文

printf的两个需要注意的问题:无符号整数和64位整数

2019年08月11日 ⁄ 综合 ⁄ 共 460字 ⁄ 字号 评论关闭

From: http://www.cnblogs.com/lidp/articles/1696079.html

 

1) %d和%u的区别
unsigned int dwValue;
printf("%d", dwValue);
在dwValue的值大于0x7FFFFFFF时,输出的结果会变成负数。
正确的程序应该为:
printf("%u", dwValue);

2) 使用64位整数
LONGLONG llValue;
int iValue;
printf("%d, %d", llValue, iValue);
iValue的值永远不会被输出,第一个%d输出的是llValue的低32位,第二个%d输出的是llValue的高32位。所以程序应该修改为:
printf("%I64d, %d", llValue, iValue);

这两个例子体现了printf()的类型不安全性。如果printf()的参数的数据类型被修改,而格式字符串不作相应修改的话,这样的隐藏错误有时很难发现,所以更改数据类型时要注意检查是否需要修改相应的格式字符串,否则编译器连警告信息都不会出现。

抱歉!评论已关闭.