我有以下代码。 sprintf 中第二个 %d 的输出始终显示为零。我想我指定了错误的说明符。任何人都可以帮助我获得具有正确值的写入字符串。这必须在posix标准中实现。感谢您的投入
void main() {
unsigned _int64 dbFileSize = 99;
unsigned _int64 fileSize = 100;
char buf[128];
memset(buf, 0x00, 128);
sprintf(buf, "\nOD DB File Size = %d bytes \t XML file size = %d bytes", fileSize, dbFileSize);
printf("The string is %s ", buf);
}
输出:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
原文由 venkysmarty 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不知道 POSIX 对此有什么看法,但核心 C99 很好地处理了这一点:
如果您的编译器不符合 C99,请使用其他编译器。 (是的,我在看着你,Visual Studio。)
PS: 如果担心便携性, 请不要 使用
%lld
。 That’s forlong long
, but there are no guarantees thatlong long
actually is the same as_int64
(POSIX) orint64_t
(C99).编辑: Mea culpa - 我或多或少无脑地“搜索和替换”了
_int64
与int64_t
没有真正看我在做什么。感谢评论指出它是uint64_t
,而不是unsigned int64_t
。已更正。