在处理从二进制文件中读取结构数据类型的简单项目时,我遇到了一个奇怪的printf格式类型mishmash.基本上我大多数时候都使用%u格式来显示无符号整数,而在我的struct中是一个成员,unsigned long long显示带有格式字符的数据的类型会导致一些奇怪的错误和几个小时的搜索错误.
这是一个例子:
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;
}
Run Code Online (Sandbox Code Playgroud)
结果:
债务:1200欧元,钱包:0欧元,支出:2500欧元.
使用Visual Studio 2013编译.
当然,当我使用%llu格式化时,一切都像预期的那样工作.
这是因为工作方式printf和实施方式造成的吗?