为什么这个程序会截断输出?

pra*_*p19 1 c

我在下面的程序中做错了吗?

    #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

ken*_*ytm 6

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).