我有以下代码。 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);
}
Output:
The string is
OD DB File Size = 100 bytes XML file size = 0 bytes
我不知道 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:如果你担心便携性,don't use %lld
。那是为了long long
,但不能保证long long
实际上是一样的_int64
(POSIX)或int64_t
(C99).
Edit:Mea culpa - 我或多或少无脑地“搜索并替换”了_int64
with int64_t
没有真正看看我在做什么。感谢您的评论指出这是uint64_t
, not unsigned int64_t
。已更正。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)