我在下面的程序中做错了吗?
码
#include <stdio.h>
int main()
{
long x=1290323123123;
int len = snprintf(NULL,0, "%ld", x);
printf("%ld %ld",x,len);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产量:1832934323 10
1290323123123需要41位来存储,但这long
可能只是32位长,因此额外的9位消失了.
1290323123123 = 0x12c6d405bb3
^^^
excessive data that is chopped off
= 0x6d405bb3
= 1832934323
Run Code Online (Sandbox Code Playgroud)
使用
#include <inttypes.h>
#include <stdint.h>
#include <stdio.h>
int main () {
int64_t x = 1290323123123LL;
// ^^^^^^^ ^^
int len = snprintf(NULL, 0, "%"PRId64, x);
// ^^^^^^^
printf("%"PRId64" %d\n", x, len);
// ^^^^^^^^
return 0;
}
Run Code Online (Sandbox Code Playgroud)
确保类型至少为64位长,因此它可以完全存储该值(结果:http://www.ideone.com/BnTjJ).