我有以下代码。 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 很好地处理了这一点: #include <stdio.h> #include <inttypes.h> int main(void) { uint64_t dbFileSize = 99; uint64_t fileSize = 100; char buf[128]; memset(buf, 0x00, 128); sprintf( buf, "\nOD DB File Size = %" PRIu64 " bytes \t" " XML file size = %" PRIu64 " bytes\n" , fileSize, dbFileSize ); printf( "The string is %s\n", buf ); 如果您的编译器不符合 C99,请使用其他编译器。 (是的,我在看着你,Visual Studio。) PS: 如果担心便携性, 请不要 使用 %lld 。 That’s for long long , but there are no guarantees that long long actually is the same as _int64 (POSIX) or int64_t (C99). 编辑: Mea culpa - 我或多或少无脑地“搜索和替换”了 _int64 与 int64_t 没有真正看我在做什么。感谢评论指出它是 uint64_t ,而不是 unsigned int64_t 。已更正。 原文由 DevSolar 发布,翻译遵循 CC BY-SA 3.0 许可协议