在C语言中,大整数.QuadPart在printf中捕获两次
我正在打印文件的大小和名称在C语言中,大整数.QuadPart在printf中捕获两次,c,printf,C,Printf,我正在打印文件的大小和名称 LARGE_INTEGER filesize; filesize.LowPart = ... ... printf("%ld %s\n", filesize.QuadPart, file.cFileName); 这导致 42 (null) 但是,当我加上一个%s(第三个是好的度量) 我明白了 42 (null) hello.c foo 显然,简单的解决方法只是在printf语句中隔离文件大小,但我仍然对为什么会发生这种情况感到目瞪口呆。为什么要使用大整数?有带本
LARGE_INTEGER filesize;
filesize.LowPart = ...
...
printf("%ld %s\n", filesize.QuadPart, file.cFileName);
这导致
42 (null)
但是,当我加上一个%s(第三个是好的度量)
我明白了
42 (null) hello.c foo
显然,简单的解决方法只是在printf语句中隔离文件大小,但我仍然对为什么会发生这种情况感到目瞪口呆。为什么要使用大整数?有带本机64支持的_int64。int64_t中还有cstdint.h(不知道Visual Studio是否支持它,但其他编译器支持) 此外,如果要打印如此大的变量,则需要%I64d。这是微软表达“我们不支持标准艺术”的方式 正确的打印方式是使用宏
PRI64d
,使用inttypes.h
奥拉夫
标准方法是使用宏PRId64,即。g
printf("%"PRId64" %s\n", filesize.QuadPart, file.cFileName);
寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整且可验证的示例。什么是
大整数
?这是一个64位整数,不是一个长整数,您将不得不使用%lldn这不是我第一次被不了解winapi.Hmya的bean的人批评,所以用户通常会寻找有线索的用户。这并不是说你找不到一个,类型名称谷歌很好,而且当它在10亿台机器上使用时,它也不晦涩难懂。请考虑删除你的评论,它们不是建设性的。正确的类型是<代码>但是标题不是cstdint.h
,而是stdint.h
。这是关于C,不是C++。正确的打印方式是使用宏PRI64d
的inttypes.h
。
printf("%"PRId64" %s\n", filesize.QuadPart, file.cFileName);