我想打印出一个文件的大小和名称。
LARGE_INTEGER filesize;
filesize.LowPart = ...
...
printf("%ld %s\n", filesize.QuadPart, file.cFileName);
这将导致
42 (null)
然而,当我多加了一个%s(和第三个)
printf("%ld %s %s %s\n", filesize.QuadPart, file.cFileName, "foo");
我明白了
42 (null) hello.c foo
显然,简单的修复方法就是在它自己的printf语句中隔离文件大小,但我仍然对为什么会发生这种情况感到困惑。
3条答案
按热度按时间oxiaedzo1#
正确的打印方式应该是
inttypes.h
和宏PRI64d
。- Olaf标准的方法是使用宏
PRId64
,例如。rfbsl7qr2#
%lld
就是您要查找的内容。这样使用:
9bfwbjaz3#
为什么要使用LARGE_INTEGER?__int64支持原生64,还有cstdint. h支持int64_t(不知道Visual Studio是否支持,但其他编译器支持)。
同样,如果你想打印这么大的变量,你需要%I64d。这是微软的方式来表示“我们不支持标准”。