printf总是打印0

好久没用 c 的 printf 输出了,然后今天调程序就遇到了一个奇怪的错误,如下:

long long n = 9999;
long long m = 8888;
printf("%d %d\n", n, m);

输出结果如下:

9999 0

想了好久都没有想出原因,最后试着增减参数,终于发现了问题。(后面才发现编译器的警告里都写清楚了,只是日常不看 warning ……)

原因

警告 C4477 “printf” : 格式字符串“ % d”需要类型“int”的参数,但可变参数 1 拥有了类型“__int64”
n 是 long long 类型,占8位!而 %d 是打印 int 整形数据的,int 只占四位,所以,第一个 %d 打印了 n 的低八位,第二个 %d 打印了 n 的高八位!(小端模式的情况下)
至于后面的 m ,直接被忽略掉了……

解决方法

直接把 %d 改成 %lld 就好了:

long long n = 9999;
long long m = 8888;
printf("%lld %lld\n", n, m);

你可能感兴趣的:(printf总是打印0)