在处理从二进制文件读取结构数据类型的简单项目时,我遇到了一个奇怪的printf格式类型混杂。基本上我大多数时候使用%u
格式来显示无符号整数,而在我的结构中是一个类型为unsigned long long
的成员显示这个格式字符的数据会导致一些奇怪的情况和几个迷失的小时来搜索错误类型。printf - 怪异的混杂结果。有人可以解释这个吗?
下面是一个例子:
struct bar {
unsigned long long ll;
unsigned int i1;
unsigned int i2;
};
int main(void)
{
bar fubar;
fubar.ll = 1200;
fubar.i1 = 2500;
fubar.i2 = 450;
printf("Debt: %u Euro, Wallet: %u Euro, Outgoings: %u Euro.\n", fubar.ll, fubar.i1, fubar.i2);
return 0;
}
结果:
债务:1200欧元,电子钱包:0欧元,排出物:2500欧元。
编译与Visual Studio 2013年
当然,当我使用%llu
格式化,一切工作像预期。
这是因为printf
的工作原理和实施方式吗?
[Can not repro](http://coliru.stacked-crooked.com/a/2bfb44c2b06fb84c)。你使用什么编译器? – Borgleader
未定义的行为未定义。 –
相关:http://stackoverflow.com/q/1748856/694576 – alk