在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);